【问题标题】:If I can do all I need in a procedure why would I use a trigger at all? [closed]如果我可以在一个程序中做我需要的所有事情,我为什么要使用触发器呢? [关闭]
【发布时间】:2021-02-10 08:41:55
【问题描述】:

我有一个一般性问题:如果我可以在程序中进行检查等和验证,为什么我需要触发器。?

【问题讨论】:

  • 触发器是存储在数据库中的 PL/SQL 单元,并且(如果处于启用状态)会自动执行(“触发”)以响应指定事件。

标签: sql stored-procedures plsql triggers


【解决方案1】:

存储过程旨在处理记录,处理操作和数据,否则很难在 sql 查询中单独执行。例如:您可以定义自己的用户定义的异常,处理文件操作,调用存储过程中的rest-api等。

另一方面,触发器是事务边界的一部分,将在表中条目的 INSERT、UPDATE、DELETE 时调用。触发触发器时可以调用存储过程。也有在 DDL 命令上调用的触发器。使用触发器的一个用例是审计记录(比如填充表更改的审计历史记录)。

触发器的一些其他功能,它可能会在 oracle 中被多次触发,检查这是如何发生的 https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:237924300346045037

在您对数据进行验证的情况下,我将首先执行以下操作。确保使用表上的约束设置所有验证,(检查约束、非空、唯一性等)。

如有必要,使用存储过程创建进一步的验证。使用触发器调用该存储过程。我不会在触发器中做任何非事务(例如:发送警报邮件等,因为它在事务边界中,即使您回滚事务也会触发触发器)

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 2019-05-20
    • 1970-01-01
    • 2014-04-23
    • 2013-11-20
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多