rt,我在plsql里改不了名

解决方案 »

  1.   


    重新创建一个,把原来的删了...
    ------------------------------------------------------------------------------
    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 
      

  2.   

    在建过程的时候,最好在过程前加入create or replace。这样在你每次编译的时候,如果在当前用户模式下存在相同的过程名,那么其会把已经存在的过程给覆盖掉,并创建一个同名的过程,这样就用不作你在创建过程前再判断系统中是否存在同名对象。
      

  3.   

    在左边的下拉菜单中 找出你的procedure 右键 选编译
      

  4.   

    alter如果你需要在存储过程中修改别的存储过程的名称就需要使用动态语句执行
      

  5.   

    create or replace procedure your-procedure-name  as 
      

  6.   


    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;
    /
      

  7.   

    有点问题,把下面的代码,稍微修改下
        --自定义异常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;
      

  8.   

    用create or replac 不安全,容易把已存在的并且有用存储过程包替换掉。