当前位置: 代码迷 >> Oracle管理 >> 这个sql语句有会把有关问题?老报错,请大侠帮忙改下
  详细解决方案

这个sql语句有会把有关问题?老报错,请大侠帮忙改下

热度:92   发布时间:2016-04-24 04:20:57.0
这个sql语句有会把问题?老报错,请大侠帮忙改下

declare status varchar2(10);status := select status from user_objects where object_type = 'PROCEDURE' and object_name='procedure_saveRoleMenu';if status == 'VALID' then drop procedure procedure_saveRoleMenu;end if;create or replace procedure procedure_saveRoleMenu is  begin insert into TRoleMenu(roleID,menuID) values(2,1);call procedure_saveRoleMenu;commit;exception when others then rollback;end;


简单说下功能
首先定义一个变量,然后查询是否存在procedure_saveRoleMenu这个存储过程,存在就删除年,再建。
存储过程实例的就一简单的插入一条数据,然后提交事务,如果出现异常,就事务回滚。

本人少写这稍复杂点的语句,小平较差,见笑,请大虾帮忙改下,谢过。

------解决方案--------------------
declare
v_status varchar2(10);
begin
select status into v_status  from user_objects where object_type = 'P
end
/
------解决方案--------------------
DDL语句要用动态sql
------解决方案--------------------
CREATE OR REPLACE PROCEDURE PROCEDURE_SAVEROLEMENU IS
BEGIN
  INSERT INTO TROLEMENU (ROLEID, MENUID) VALUES (2, 1);
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
END;

存储过程在创建时用CREATE OR REPLACE,就说明一点,存在则覆盖,不存在则创建。所以,我认为,楼主在前面写的删除存储过程的sql块是多余的,是可以省略的。
  相关解决方案