Trigger

DB2 觸發器錯誤:在 SQLCODE=-104、SQLSTATE=42601、DRIVER=3.68.61 之後發現了意外的標記“OR INSERT”

  • July 7, 2015

執行以下查詢時出現錯誤。根據 DB2 文件,我們可以在同一個觸發器中同時包含更新和插入事件,但是當我嘗試這樣做時,我得到了一個錯誤。

CREATE TABLE NULL_LOOKUP (
   ID INT NOT NULL,
   TABLE_NAME VARCHAR(100) NOT NULL
);

CREATE TABLE PARENT (
   PARENT_ID INT NOT NULL,
   PARENT_NAME VARCHAR(100) NOT NULL
);

CREATE TABLE CHILD_ONE (
   CHILD_ONE_ID INT NOT NULL,
   CHILD_NAME VARCHAR(100) NOT NULL,
   PARENT_ID INT
);

--#SET TERMINATOR @
CREATE OR REPLACE TRIGGER RESET_NULL_TRIGGER 
BEFORE UPDATE OF PARENT_ID OR INSERT ON CHILD_ONE 
REFERENCING NEW AS N 
FOR EACH ROW WHEN (N.PARENT_ID IS NULL) 
   BEGIN ATOMIC
   SET N.PARENT_ID = (SELECT ID FROM NULL_LOOKUP WHERE TABLE_NAME = 'PARENT');
   END
@ 
--#SET TERMINATOR ;

BEGIN ATOMIC只需BEGIN在觸發器主體中替換為。

BEGIN ATOMIC表示內聯複合 SQL 語句,BEGIN –編譯複合語句。文件狀態

如果指定了多個事件,則觸發的操作必須是複合 SQL(已編譯)語句。

引用自:https://dba.stackexchange.com/questions/106223