为什么在使用"插入选择"时不会在每一行触发触发器。或"合并"

时间:2014-12-04 15:55:52

标签: sql database hsqldb triggers

我为表定义了BEFORE INSERT触发器,它对于单个INSERT语句按预期工作,但不适用于INSERT ... SELECTMERGE语句。

这些是我的数据库对象(简化):

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"

这可能意味着它试图从序列中插入两次相同的密钥。

我正在使用HSQLDB的最新版本2.3.2。

1 个答案:

答案 0 :(得分:0)

因为触发器是基于行设置的,而不是基于行的。

查看详情here