【问题标题】:How to use instead of for trigger in oracle?如何在 oracle 中使用而不是 for 触发器?
【发布时间】:2013-08-21 12:18:13
【问题描述】:
create or replace trigger beforeInsert
instead of insert on Friends
for each row



begin
dbms_output.put_line('This operation is prohibited');
end beforeInsert;

我正在尝试创建一个触发器,该触发器会显示消息“禁止此操作”而不是插入到 table 中,但会出现编译错误。 Oracle IDE 要求我指定之前或之后。怎么了?我知道instead of 用于视图,但是如何禁止使用触发器插入表?

【问题讨论】:

  • 您要引发异常吗?在触发器中执行诸如 call dbms_output.put_line 之类的操作是没有意义的,因为您无法知道调用者是否甚至分配了一个缓冲区来将输出写入其中,或者调用者是否会显示您的消息。允许 INSERT 语句看起来对调用应用程序成功但实际上没有做任何事情是没有意义的。

标签: oracle triggers


【解决方案1】:

INSTEAD OF 触发器只能在视图上创建。

对于表,您可以创建BEFOREAFTER 触发器。事实上,您可以根据您的要求在表上创建四种不同类型的触发器:

BEFORE STATEMENT
  BEFORE ROW
  AFTER ROW
AFTER STATEMENT

根据您的要求,如果您想禁止插入到表中,请不要使用触发器。改为撤销用户的 INSERT 权限。

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 2012-03-02
    • 2012-08-29
    • 2017-10-06
    • 2014-06-18
    • 2017-05-26
    • 1970-01-01
    • 2019-09-19
    相关资源
    最近更新 更多