如何在oracle中的user_scheduler_jobs上创建触发器?

时间:2012-03-05 10:15:36

标签: oracle triggers

我是oracle的新手。在我们的应用程序中,我们需要在计划作业的运行持续时间超过10分钟时执行一个过程。我们正在检查user_scheduler_jobs表,并且必须在last_run_duration列超过10分钟时触发一个过程。我们尝试为此目的创建触发器,如下所示:

CREATE TRIGGER TRG1
  AFTER UPDATE ON ALL_SCHEDULER_JOBS
  BEGIN
  MONITOR_JOB_DURATION();
  END TRG1;

但是当我尝试编译触发器时,它显示错误为

Error report:
ORA-25001: cannot create this trigger type on views
25001. 00000 -  "cannot create this trigger type on views"
*Cause:    Only INSTEAD OF triggers can be created on a view.
*Action:   Change the trigger type to INSTEAD OF.

user_scheduler_jobs是一个观点吗? 如果我继续执行INSTEAD OF触发器,它是否会影响作业执行后自动发生的更新?

2 个答案:

答案 0 :(得分:2)

user_scheduler_jobs是一个观点吗?肯定是。更重要的是,它是在SYS模式中,你真的不应该试图弄乱该模式。它对于数据库的运行至关重要,应该像Oracle安装它一样保存。


Oracle Enterprise Manager具有一些监视作业的功能。在开始自己推动之前,你有没有看过它?

答案 1 :(得分:1)

处理此问题的最佳方法是检查代码运行了多长时间,然后执行某些操作。正如APC所述,在任何情况下都不会开始在SYS架构中放置触发器或其他任何内容,因此会造成更多麻烦。像下面这样的东西应该有效:

declare

   l_start_time date default sysdate;

   -- other stuff

begin

  -- do something

  if sysdate - l_start_time > ( 1 / 24 / 6 )
     -- run something else
     -- maybe using dbms_scheduler
  end if;

  -- do more stuff

end;