【发布时间】:2021-02-10 08:41:55
【问题描述】:
我有一个一般性问题:如果我可以在程序中进行检查等和验证,为什么我需要触发器。?
【问题讨论】:
-
触发器是存储在数据库中的 PL/SQL 单元,并且(如果处于启用状态)会自动执行(“触发”)以响应指定事件。
标签: sql stored-procedures plsql triggers
我有一个一般性问题:如果我可以在程序中进行检查等和验证,为什么我需要触发器。?
【问题讨论】:
标签: sql stored-procedures plsql triggers
存储过程旨在处理记录,处理操作和数据,否则很难在 sql 查询中单独执行。例如:您可以定义自己的用户定义的异常,处理文件操作,调用存储过程中的rest-api等。
另一方面,触发器是事务边界的一部分,将在表中条目的 INSERT、UPDATE、DELETE 时调用。触发触发器时可以调用存储过程。也有在 DDL 命令上调用的触发器。使用触发器的一个用例是审计记录(比如填充表更改的审计历史记录)。
触发器的一些其他功能,它可能会在 oracle 中被多次触发,检查这是如何发生的 https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:237924300346045037
在您对数据进行验证的情况下,我将首先执行以下操作。确保使用表上的约束设置所有验证,(检查约束、非空、唯一性等)。
如有必要,使用存储过程创建进一步的验证。使用触发器调用该存储过程。我不会在触发器中做任何非事务(例如:发送警报邮件等,因为它在事务边界中,即使您回滚事务也会触发触发器)
【讨论】: