当前位置:操作系统 > Unix/Linux >>

自动编译失效存储过程

自动编译失效存储过程
 
CREATE OR REPLACE PROCEDURE PRC_COMPILE_INVALID 
IS 
  --/************************************************************************************ 
  -- 程序名称:    PRC_COMPILE_INVALID 
  -- 功能描述:    每天编译失效的存储过程和失效的索引 
 
  v_sql       VARCHAR2(10000) DEFAULT ''; -- 动态SQL变量,注意SQL长度 
  v_prc       VARCHAR2(40); 
  v_date      VARCHAR2(8); 
  v_stepnum   NUMBER          DEFAULT 0;           -- 运行步骤 
  v_errmsg    VARCHAR2(1024)  DEFAULT '正常'; 
BEGIN 
  v_prc:='PRC_COMPILE_INVALID'; 
  SELECT to_char(SYSDATE,'yyyymmdd') INTO v_date FROM  dual; 
  --正文SQL处理 
  --循环将无效存储过程取出 对其进行编译 
  v_stepnum :=v_stepnum+1; 
       For x In (Select Object_Name From user_objects Where Status = 'INVALID' And Object_Type = 'PROCEDURE') Loop 
        v_sql := 'Alter Procedure ' || x.Object_Name || ' COMPILE'; 
        Begin 
             EXECUTE IMMEDIATE v_sql; 
        PRC_LOG_WRT(v_date,v_prc,v_stepnum,v_sql,v_errmsg,SQL%ROWCOUNT); 
        COMMIT; 
        End; 
       End Loop;        
        
      --将无效索引取出  对其进行编译 
     v_stepnum :=v_stepnum+1; 
       FOR y In (SELECT  t.index_name from  all_indexes t WHERE t.owner='DBCHNADM' AND t.status='UNUSABLE') Loop 
        v_sql := 'ALTER INDEX '||y.index_name ||' rebuild '; 
        Begin 
             EXECUTE IMMEDIATE v_sql; 
        PRC_LOG_WRT(v_date,v_prc,v_stepnum,v_sql,v_errmsg,SQL%ROWCOUNT); 
        COMMIT; 
        End; 
       End Loop;     
      
     -- 存储过程错误信息记录 
  EXCEPTION 
  WHEN OTHERS THEN 
 
    v_errmsg := v_stepnum || '步出错:' || SQLERRM; 
    PRC_LOG_WRT(v_date,v_prc,v_stepnum,v_sql,v_errmsg,-1); 
    COMMIT; 
 
END;
 
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,