我为表定义了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"
这可能意味着它试图从序列中插入两次相同的密钥。
我正在使用HSQLDB的最新版本2.3.2。