【问题标题】:Trigger based on sysdate基于 sysdate 触发
【发布时间】:2013-01-01 12:25:35
【问题描述】:

我有一张桌子

表架构:

CREATE TABLE CHARGES 
(
    total NUMBER(30),
    admitdate TIMESTAMP(6),
    dischargedate TIMESTAMP(30)
)

触发算法:

if 
{
   dischargedate="null" 
   then total=admitdate-sysdate=difference in days * Total
   Do this every day at 12:00(24 Hr. Format)
}
else
{
    Do Nothing;
}

我的问题是如果系统在凌晨 12:00 离线怎么办。此问题将不允许触发器运行。

【问题讨论】:

    标签: sql database oracle plsql triggers


    【解决方案1】:

    要在特定时间运行一段代码,您可以使用jobs。触发器仅用于响应表更改。 如果服务器宕机(它几乎不应该宕机),该作业可以在以后运行。

    【讨论】:

    • 我对工作了解不多,谢谢你告诉我我会在工作中尝试这个
    • 但是如果系统在12:00离线,在系统重新控制并在线后,我们如何检查作业是否执行
    • @Akki 用于 dbms_scheduler 作业检查 ALL_SCHEDULER_JOB_RUN_DETAILSALL_SCHEDULER_JOB_LOG 视图以获取作业详细信息。如果由于停机时间错过了预定时间,他们将“赶上”。对于较旧的 DBMS_JOB,日志记录较少,但最后日期等列在 ALL_JOBS
    • SELECT to_char(sysdate,DD-MON-YY),job_name,operation,status FROM USER_SCHEDULER_JOB_LOG WHERE job_name="your job name" AND status="SUCCEEDED" if not found 然后重新运行作业对@DazzaL
    • @Akki 该表是一个日志表,因此它将有很多行(每次运行 1 行)。所以你需要查看感兴趣的REQ_START_DATE
    【解决方案2】:

    如果您可以更改方法并仅存储静态值,则维护和推理会更容易。并且仅在需要时使用 sysdate 进行计算,例如在需要时在 sql 输出中进行计算。

    【讨论】:

    • 我正在做的项目是动态的,我需要在每天 12:00 执行这些任务,但也需要为灾难做好计划,这就是为什么要考虑如果系统出现故障该怎么办
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 2011-05-13
    • 2010-10-19
    相关资源
    最近更新 更多