gpt4 book ai didi

oracle - 在 Oracle 11g 中创建触发器

转载 作者:行者123 更新时间:2023-12-04 06:04:19 29 4
gpt4 key购买 nike

我想在 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;

最佳答案

我不知道在选择上有触发器的方法。来自 the documentation ,您可以触发的唯一语句是插入/删除/更新(和一些 DDL)。

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

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

关于oracle - 在 Oracle 11g 中创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8545771/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com