Skip to content

重编译失效存储函数

语法格式

sql
RecompileStmt::=
    ALTER FUNCTION name_space RECOMPILE

示例

  1. 创建表并插入数据,再创建存储函数并使用。
    sql
    SQL> CREATE TABLE test_proc_tab (id NUMBER);
    
    SQL> INSERT INTO test_proc_tab (id) VALUES (1)(2)(3);  
    
    SQL> CREATE OR REPLACE FUNCTION  func_test()
    RETURN INT
    AS
      ret INT;
    BEGIN
      SELECT MAX(id) INTO ret FROM test_proc_tab;
      RETURN ret;
    END;
    /   
    
    SQL> SELECT func_test() FROM dual;
    
    EXPR1 | 
    ------------------------------------------------------------------------------
    3 |
  2. 强制删除表,存储函数失去依赖表失效。
    sql
    SQL> DROP TABLE test_proc_tab CASCADE;  
    
    SQL> SELECT func_test() FROM dual;
    Error: [E8014 L1 C8] 存储过程或函数FUNC_TEST被标识为失效
  3. 重新创建表并插入数据,重编译存储函数,可正常使用。
    sql
    SQL> CREATE TABLE test_proc_tab (id NUMBER);
    
    SQL> INSERT INTO test_proc_tab (id) VALUES (1)(2)(3);
    
    SQL> ALTER FUNCTION func_test RECOMPILE; 
    
    SQL> SELECT func_test() FROM dual;
    
    EXPR1 | 
    ------------------------------------------------------------------------------
    3 |