首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何中断触发事件?

如何中断触发事件?
EN

Stack Overflow用户
提问于 2009-11-25 20:27:01
回答 2查看 5.9K关注 0票数 2

有一些触发器:

代码语言:javascript
复制
CREATE OR REPLACE TRIGGER `before_insert_trigger` BEFORE INSERT 

ON `my_table` FOR EACH ROW 

DECLARE `condition` INTEGER:=0;

BEGIN

    IF **** THEN
        condition=1;
    END IF;

    IF condition <> 0 THEN    
        --Here I need to break trigger or event or smth to prevent
        --INSERT to be done    
    END IF;

END;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-25 20:41:39

要防止语句成功,只需引发一个错误。这将回滚语句(每个语句都是原子的,它会完全失败或成功)。在插入开始之前,您不会丢失在此事务中所做的工作。

您可以使用raise_application_error过程来引发错误。

下面是一个小示例:

代码语言:javascript
复制
SQL> CREATE TABLE foo (ID NUMBER);

Table created

SQL> CREATE OR REPLACE TRIGGER trg BEFORE INSERT ON foo FOR EACH ROW
  2  BEGIN
  3     IF :new.id = 2 THEN
  4        raise_application_error(-20001, 'Id should not be "2"');
  5     END IF;
  6  END;
  7  /

Trigger created

SQL> INSERT INTO foo (SELECT 1 FROM dual UNION ALL SELECT 2 FROM dual);

INSERT INTO foo (SELECT 1 FROM dual UNION ALL SELECT 2 FROM dual)

ORA-20001: Id should not be "2"
ORA-06512: at "VNZ.TRG", line 3
ORA-04088: error during execution of trigger 'VNZ.TRG'

SQL> select * from foo;

        ID
----------
票数 7
EN

Stack Overflow用户

发布于 2009-11-25 21:56:24

我会尽我所能将这个逻辑嵌入到检查条件中,而不是触发器中。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1796599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档