现在发现有大量存储过程失效,不可能一个一个编译,有什么办法可以批量编译?

解决方案 »

  1.   

    如果在服务器本机上,可以在sqlplus中以sysdba身份登陆执行rdbms\admin\目录下的utlrp.sql脚本。也可以自己写个脚本,从user_objects中查出所有invalid的存储过程名,然后用动态sql对那些过程重新编译(alter procedure XXX recompile)。
      

  2.   

    select 'ALTER PROCEDURE '||object_name||' COMPILE;' as s from user_objects where object_type='PROCEDURE' and status<>'VALID';把得到的结果拿来执行就可以了.
      

  3.   

    select 'ALTER   PROCEDURE   ' || object_name || '   COMPILE; ' as s
      from user_objects
     where object_type = 'PROCEDURE '
       and status <> 'VALID ';