Skip to content

重编译失效存储过程

语法格式

sql
RecompileStmt::=
    ALTER PROCEDURE name_space RECOMPILE

示例

  1. 创建存储过程pro1pro2pro2依赖于pro1
    sql
    -- 创建存储过程pro1
    SQL> CREATE OR REPLACE PROCEDURE pro1 IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('abc');
    END;
    /
    
    -- 创建存储过程pro2
    SQL> CREATE PROCEDURE pro2 IS
    BEGIN
        EXEC pro1;
    END;
    /
  2. 强制删除pro1,导致pro2失效。
    sql
    -- 强制删除存储过程pro1
    SQL> DROP PROCEDURE pro1 CASCADE;  
    
    -- 存储过程pro2已失效
    SQL> SELECT valid FROM user_procedures WHERE proc_name='PRO2';
    
    VALID | 
    ------------------------------------------------------------------------------
    F |
  3. 重新创建pro1,并对pro2进行重编译,功能恢复。
    sql
    -- 重新创建存储过程pro1
    SQL> CREATE OR REPLACE PROCEDURE pro1 IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('abc');
    END;
    /
    
    -- 此时pro2依然失效
    SQL> SELECT valid FROM user_procedures WHERE proc_name='PRO2';
    
    VALID | 
    ------------------------------------------------------------------------------
    F |
    
    -- 重编译pro2
    SQL> ALTER PROCEDURE pro2 RECOMPILE;
    
    -- 存储过程pro2已恢复
    SQL> SELECT valid FROM user_procedures WHERE proc_name='PRO2';
    
    VALID | 
    ------------------------------------------------------------------------------
    T |