在建过程的时候,最好在过程前加入create or replace。这样在你每次编译的时候,如果在当前用户模式下存在相同的过程名,那么其会把已经存在的过程给覆盖掉,并创建一个同名的过程,这样就用不作你在创建过程前再判断系统中是否存在同名对象。
在左边的下拉菜单中 找出你的procedure 右键 选编译
alter如果你需要在存储过程中修改别的存储过程的名称就需要使用动态语句执行
create or replace procedure your-procedure-name as
create or replace procedure procedure_rename( procedure_old_name varchar2, procedure_new_name varchar2 ) is --开关变量用于控制是否存在你要改名的过程 i int:=0; --sql存储变量用于存储建过程的sql文 sql_str long; --自定义异常1 用于检查你是否误操作想把本过程改名 err1 exception; --自定义异常2 用于检查你是否误操作想把过程改名成本过程 err2 exception; --本过程名变量,如果你认为[procedure_rename]名字不好的话,记住这里也要修改! procedure_name varchar(20) := 'procedure_rename'; --参数游标 查询要改名的过程定义 cursor cur(proc_name varchar2) is select text from user_source where NAME = upper(proc_name) and line > 1; begin --自定义异常1 if procedure_old_name = procedure_name then raise err1; end if; --自定义异常2 if procedure_new_name = procedure_name then raise err2; end if; --初始化 sql_str sql_str := 'create procedure '||procedure_new_name||' '; --得到要改名的过程定义 for rec in cur(procedure_old_name) loop i :=1; sql_str := sql_str||rec.text; end loop; --如果要改名的过程存在,执行改名过程 if i = 1 then --新建一个过程 execute immediate sql_str; --删掉原来过程,这句话可能会出错 如果别人正在使用这个过程 execute immediate 'drop procedure '||procedure_old_name; else raise_application_error('-20004','数据库中不存在名叫['||procedure_old_name||']的过程!'); end if; exception when err1 then raise_application_error('-20001','请不要试图将过程['||procedure_old_name||']改名!'); when err2 then raise_application_error('-20002','请不要试图将过程改名为['||procedure_new_name||']!'); when others then raise_application_error('-20003','数据库中已经存在名叫['||procedure_new_name||']的过程!'); end; /
有点问题,把下面的代码,稍微修改下 --自定义异常1 if upper(procedure_old_name) = upper(procedure_name) then raise err1; end if; --自定义异常2 if upper(procedure_new_name) = upper(procedure_name) then raise err2; end if;
重新创建一个,把原来的删了...
------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
Q Q 群:62697716
create or replace procedure procedure_rename(
procedure_old_name varchar2,
procedure_new_name varchar2
)
is
--开关变量用于控制是否存在你要改名的过程
i int:=0;
--sql存储变量用于存储建过程的sql文
sql_str long;
--自定义异常1 用于检查你是否误操作想把本过程改名
err1 exception;
--自定义异常2 用于检查你是否误操作想把过程改名成本过程
err2 exception;
--本过程名变量,如果你认为[procedure_rename]名字不好的话,记住这里也要修改!
procedure_name varchar(20) := 'procedure_rename';
--参数游标 查询要改名的过程定义
cursor cur(proc_name varchar2) is
select text from user_source where NAME = upper(proc_name) and line > 1;
begin
--自定义异常1
if procedure_old_name = procedure_name then
raise err1;
end if;
--自定义异常2
if procedure_new_name = procedure_name then
raise err2;
end if;
--初始化 sql_str
sql_str := 'create procedure '||procedure_new_name||' ';
--得到要改名的过程定义
for rec in cur(procedure_old_name) loop
i :=1;
sql_str := sql_str||rec.text;
end loop;
--如果要改名的过程存在,执行改名过程
if i = 1 then
--新建一个过程
execute immediate sql_str;
--删掉原来过程,这句话可能会出错 如果别人正在使用这个过程
execute immediate 'drop procedure '||procedure_old_name;
else
raise_application_error('-20004','数据库中不存在名叫['||procedure_old_name||']的过程!');
end if;
exception
when err1 then
raise_application_error('-20001','请不要试图将过程['||procedure_old_name||']改名!');
when err2 then
raise_application_error('-20002','请不要试图将过程改名为['||procedure_new_name||']!');
when others then
raise_application_error('-20003','数据库中已经存在名叫['||procedure_new_name||']的过程!');
end;
/
--自定义异常1
if upper(procedure_old_name) = upper(procedure_name) then
raise err1;
end if;
--自定义异常2
if upper(procedure_new_name) = upper(procedure_name) then
raise err2;
end if;