暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 从触发器调用计划程序

askTom 2016-05-16
207

问题描述

如何从触发器调用调度程序?

专家解答

对DBMS_调度器。创建操作的调用发出隐式提交。

通常不能在触发器内部提交,因此此操作失败。您可以使用一个自动操作来解决这个问题:

SQL> create table t (
  2    x int
  3  );

Table created.

SQL>
SQL> create or replace trigger trig
  2    after insert on t
  3  declare
  4    pragma autonomous_transaction;
  5  begin
  6
  7    dbms_scheduler.create_job (
  8      job_name        => 'test_job',
  9      job_type        => 'PLSQL_BLOCK',
 10      job_action      => 'begin null end;',
 11      start_date      => systimestamp,
 12      repeat_interval => 'freq=daily;',
 13      enabled         => true);
 14
 15  end;
 16  /

Trigger created.

SQL>
SQL> insert into t values (1);

1 row created.

SQL>
SQL> select job_name from user_scheduler_jobs;

JOB_NAME
------------------------------
TEST_JOB


确定你真的想这么做!如果回滚插入操作,则该作业仍将存在。继续上面的例子:

SQL> rollback;

Rollback complete.

SQL>
SQL> select * from t;

no rows selected

SQL>
SQL> select job_name from user_scheduler_jobs;

JOB_NAME
------------------------------
TEST_JOB


所以这可能会导致一些意想不到的结果
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论