【问题标题】:Create trigger in Oracle 11g在 Oracle 11g 中创建触发器
【发布时间】:2011-12-17 15:33:59
【问题描述】:

我想在 Oracle 11g 中创建一个触发器。问题是我想要一个每次有 SELECT 语句时运行的触发器。这是可能的还是有其他方法可以达到相同的结果。这是 PL/SQL 块:

CREATE TRIGGER time_check
   BEFORE INSERT OR UPDATE OF users, passwd, last_login ON table
   FOR EACH ROW
   BEGIN
      delete from table where last_login < sysdate - 30/1440;
   END;

我正在尝试实现一个可以存储用户数据的表。我想“刷新”超过一小时的行。是否有其他替代方法可以实现这一点?

p.s 你能告诉我这个 PL/SQL 块是正确的吗?有错误吗?

BEGIN
sys.dbms_scheduler.create_job(
job_name => '"ADMIN"."USERSESSIONFLUSH"',
job_type => 'PLSQL_BLOCK',
job_action => 'begin
   -- Insert PL/SQL code here
   delete from UserSessions where last_login < sysdate - 30/1440;
end;',
repeat_interval => 'FREQ=MINUTELY;INTERVAL=2',
start_date => systimestamp at time zone 'Asia/Nicosia',
job_class => '"DEFAULT_JOB_CLASS"',
comments => 'Flushes expired user sessions',
auto_drop => FALSE,
enabled => FALSE);
sys.dbms_scheduler.set_attribute( name => '"ADMIN"."USERSESSIONFLUSH"', attribute => 'job_priority', value => 5);
sys.dbms_scheduler.set_attribute( name => '"ADMIN"."USERSESSIONFLUSH"', attribute => 'logging_level', value => DBMS_SCHEDULER.LOGGING_FAILED_RUNS);
sys.dbms_scheduler.enable( '"ADMIN"."USERSESSIONFLUSH"' );
END;

【问题讨论】:

  • 我正在尝试实现一个可以存储用户数据的表。我想“刷新”超过一小时的行。你能提出其他替代方案吗?
  • 我编辑了您的问题以添加您在评论中发布的内容,因为它是相关的。 (下次您可以自己做 - 确保您的问题包含所有相关信息。)

标签: oracle oracle11g


【解决方案1】:

我不知道在选择时设置触发器的方法。从the documentation 开始,您可以触发的唯一语句是插入/删除/更新(以及一些 DDL)。

对于您想要做的事情,我会建议一个更简单的解决方案:使用 DBMS_SCHEDULER 包每隔一段时间安排一次清理工作。它不会增加您的选择查询的开销,因此它对全局性能的影响应该较小。

您会在以下位置找到很多示例:Examples of Using the Scheduler

【讨论】:

  • 好的,我同意。我可以在每次加载页面或 DBMS_SCHEDULER 之前使用 SQL 语句。那么哪一个会使用更少的资源?
  • 这取决于您需要清除数据的频率。如果它只有“大约一个小时”,并且您不在乎那里是否还有更多,那么 DBMS_SCHEDULER 工作(可能每 15 分钟左右)将相对便宜。如果您需要严格清除数据,那么您需要支付每页查询费用或类似费用。
  • 我需要每分钟运行一次 DBMS_SCHEDULER。这是不是繁重的操作?
  • 可能昂贵的部分是您每分钟运行的代码,只要您不经常调度,调度程序本身就很便宜。这没有硬性规定,您需要尝试衡量对特定用例的影响。
  • 好的,所以我创建 PL/SQL 块并将其添加到 DBMS_SCHEDULER 以每分钟执行一次。
猜你喜欢
  • 2013-06-02
  • 2017-07-19
  • 1970-01-01
  • 2016-06-24
  • 2014-06-21
  • 2013-12-24
  • 2018-02-07
  • 1970-01-01
  • 2012-08-23
相关资源
最近更新 更多