自动编译失效存储过程 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    自动编译失效存储过程

    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;

最新文章