【问题标题】:triggers based on time plsql基于时间的触发器 plsql
【发布时间】:2015-02-03 11:15:18
【问题描述】:

是否可以根据时间创建触发器或事件,例如时间是 02:00,然后从表中删除记录并将其插入到其他表中,以便清理审计日志或创建备份或执行某些程序可以执行。如果可能,请提供示例。

(编辑)

我已经创建了以下事件,但它不起作用我在这里缺少什么

mysql> CREATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO UPDATE test.test SET number = 11;

这里的 test 是一个包含 number 作为 column_name 的表

【问题讨论】:

  • 它应该同时适用于 MySQL 和 Oracle?
  • 我想看一个 MySql 的例子,如果有人知道 Oracle 的例子会更好,以供将来参考
  • 触发器触发事件​​(即插入、删除或更新)。所以当相应的事件发生时,触发器就会被执行。无论如何,你肯定可以编写你的触发器(就像几乎任何其他代码一样)它应该做什么取决于sysdate
  • @evilive 能否提供有关如何在 Mysql 数据库中基于 sysdate 编写触发器的示例或链接
  • 在mysql中可以使用事件调度器dev.mysql.com/doc/refman/5.1/en/events.html

标签: mysql sql plsql


【解决方案1】:

根据时间事件创建触发器,例如时间是否为 02:00

不要使用触发器,使用 DBMS_SCHEDULERDBMS_JOB 取决于数据库版本。

这会创建一个每天凌晨 2 点运行的作业

BEGIN
  DBMS_SCHEDULER.create_job (
    job_name        => 'daily_report_run',
    job_type        => 'STORED_PROCEDURE',
    job_action      => 'daily_run',
    start_date      => SYSTIMESTAMP,
    repeat_interval => 'freq=hourly; byhour=2',
    end_date        => NULL,
    enabled         => TRUE);
END;
/
dbms_scheduler.create_schedule('daily_run', repeat_interval =>
  'FREQ=DAILY;BYHOUR=02');

然后运行“daily_report”程序

DBMS_SCHEDULER.CREATE_PROGRAM (
   program_name => 'daily_report_job',
   program_type   => 'STORED_PROCEDURE',
   program_action    => 'daily_report',
   enabled   => TRUE);

【讨论】:

  • mysql 有调度程序或作业吗?
  • mysql> CREATE EVENT myevent ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 1 MINUTE DO UPDATE test.test SET number = 11;
  • 以上是我创建的事件,但它没有将预期的列值更新到 Mysql 数据库我做错了什么吗?
  • 那真的应该作为一个单独的问题发布
猜你喜欢
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多