数据库触发器是替代品吗?

3 trigger oracle

我有以下测验问题,由于有点困惑而无法自己回答。

请回答这个问题并告诉我为什么?

数据库触发器是替代品吗?

A. 存储过程
B. 实现参照完整性的主键
C.实现参照完整性的外键
D. 以上都是

Lei*_*fel 12

我不希望问题的作者是这样的意思,但是文字意味着事情并且问题指定了“数据库触发器”,因此没有正确的答案

DATABASE 触发器在数据库上创建并在任何数据库用户启动触发事件时触发。(PL/SQL 语言参考 - DATABASE 触发器)

与 Row 和 Statement 触发器不同,Database 触发器为诸如AFTER STARTUP ON DATABASEAFTER SERVERERROR ON DATABASE和 之类的东西触发 AFTER LOGON ON DATABASE


Jus*_*ave 11

以上都不是。

在多用户系统中正确执行将异常困难(并且它的效率比正确执行要低得多),但理论上可以使用一组触发器实现伪主键或外键。几乎没有一个尝试过的人会真正正确地实现它,但它是可以做到的。

您可以在存储过程中实现一些可以在触发器中实现的逻辑。但是触发器很难替代存储过程。例如,您不能从应用程序调用触发器或传入参数,因此它几乎不值得被称为存储过程的替代品。并且有很多事情存储过程可以相对容易地完成,但在触发器中却非常困难,或者会将您的系统变成一堆试图解决变异表异常的触发器。