我定義了一個BEFORE INSERT
觸發器表和它的作品如預期的單INSERT
報表上的每一行解僱,但不是INSERT ... SELECT
也不MERGE
語句。爲什麼不觸發當使用「插入選擇」或「合併」
這些是我的數據庫對象(簡體):
CREATE TABLE "COMPANY" (
"ID" NUMBER NOT NULL,
"NAME" VARCHAR(100)
);
CREATE TABLE "EMPLOYEE" (
"ID" NUMBER NOT NULL,
"COMPANY_ID" NUMBER NOT NULL
);
CREATE UNIQUE INDEX "EMPLOYEE_PK" ON "EMPLOYEE" ("ID");
CREATE SEQUENCE "EMPLOYEE_SEQUENCE";
CREATE TRIGGER "BI_EMPLOYEE" BEFORE INSERT ON "EMPLOYEE"
REFERENCING NEW AS newrow FOR EACH ROW BEGIN ATOMIC
IF newrow.id IS NULL THEN
SET newrow.id = NEXT VALUE FOR employee_sequence;
END IF;
END;
如果單INSERT
語句執行,一切正常,該ÌD
是從序列中取出。但是,如果我執行比如
INSERT INTO employee (company_id) SELECT id FROM company;
的東西,我得到一個錯誤:
integrity constraint violation: unique constraint or index violation: "EMPLOYEE_PK"
這可能propably意味着它試圖插入從序列相同的鍵兩次。
我正在使用HSQLDB的最新版本2.3.2。
你知道,你可以定義你的'employee.id'列'默認爲identity'這將徹底去除需要觸發產生。 – 2014-12-04 16:16:34
@a_horse_with_no_name是的,但不幸的是我不得不反映一個oracle數據庫的結構(這是單元測試)。所以我必須使用一個序列。 – Zeemee 2014-12-05 06:51:40
使用不同的DBMS進行單元測試是錯誤的。這只是DBMS之間許多差異的一個例子(有時顯而易見,有時非常微妙)。針對不同DBMS運行的單元測試並不是真正有效的測試。 – 2014-12-05 06:55:16