我用的一個腳本,是對該用戶所有的對象重編譯(過程,函數,視圖等)
名稱:ALL.SQL
內容:
SET PAGESIZE 0
SET FEEDBACK OFF
SET VERIFY OFFSPOOL TEMP.SQLSELECT 'ALTER '|| OBJECT_TYPE || ' ' || OWNER || '.' || OBJECT_NAME || ' COMPILE;'
FROM    ALL_OBJECTS
WHERE   STATUS      = 'INVALID'
AND     OWNER       = DECODE(UPPER('&&NAME'), 'ALL',OWNER, UPPER('&&NAME'));SPOOL [email protected] PAGESIZE 14
SET FEEDBACK ON
SET VERIFY ON同事建立一個空的TEMP.SQL的腳本

解决方案 »

  1.   

    1、使用动态sql(尽管效率不高,但是容错性强);
    2、写一个存储过程用来编译存储过程,并且把它加入job;
      cursor cur_Procedure_List is select ...;
      ...
      open cur_Procedure_List;
       //建立循环,然后:
       ...
       alert procedure ... compile;
       ...
    3、在调用存储过程前,先将要调用的存储过程先编译。
      

  2.   

    我现在用的就是〔包子〕的方法,很方便的。
    jiezhi(風依舊)的方法是不是将存储过程invalid和valid的存储过程都重新编译了呀