因为经常修改存储过程,现在需要做个存储过程版本控制
具体的思路是,当存储过程编译的时候,会向监控表插入日志
所以请问下我如何在编译完存储过程后,能自动向表中插入存储过程名,编译时间

解决方案 »

  1.   

    你可以写一个专门用于编译存储过程并插入日志的存储过程,例:
    参数is_proc_name就是你想编译的存储过程的名字
    create or replace PROCEDURE compile_test(is_proc_name varchar2)
    as
      sqltext varchar2(100) := 'ALTER PROCEDURE ' || is_proc_name || ' COMPILE';
    begin
      execute immediate sqltext;--开始编译存储过程
      insert into compile_log values (sysdate, 'COMPILE PROCEDURE');--写日志表
      commit;
    exception when others then
      rollback;
    end;
      

  2.   

    我不知道你的“编译”指什么,是create or replace procedure?如果是,那么就创建schema级别触发器
    create trigger tri_t 
    after create on schema
    declarebegin
       dbms_output.put_line(ora_dict_obj_type);
       dbms_output.put_line(ora_dict_obj_owner);
       dbms_output.put_line(ora_dict_obj_name);
    --里面写你的日志逻辑
    end;