自动编译失效存储过程
自动编译失效存储过程
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;