【发布时间】:2018-08-16 20:31:42
【问题描述】:
我一直在研究一个简单的 upsert 触发器,它使用与一个名为 vibki 的列相关的唯一索引。
表 DLL 信息以便于访问:
CREATE TABLE "D2C_EVENT_GENERATION_BOM"
( "VIBKI" VARCHAR2(40 BYTE),
"STATUS" VARCHAR2(100 BYTE),
"LASTRUNTIME" DATE
);
CREATE UNIQUE INDEX "D2C_EVENT_GENERATION_BOM_IND" ON ."D2C_EVENT_GENERATION_BOM" ("VIBKI");
--------------------------------------------------------
-- Constraints for Table D2C_EVENT_GENERATION_BOM
--------------------------------------------------------
ALTER TABLE "D2C_EVENT_GENERATION_BOM" MODIFY ("VIBKI" NOT NULL ENABLE);
这是我的触发器 PL/SQL:
create or replace TRIGGER "BL_D2C_EVENT_GENERATION_BOM"
BEFORE INSERT
ON D2C_EVENT_GENERATION_BOM REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
UPDATE D2C_EVENT_GENERATION_BOM SET vibki = :NEW.vibki, status = 'NEW', lastruntime = sysdate
WHERE vibki = :NEW.vibki;
IF ( sql%notfound ) THEN
INSERT INTO D2C_EVENT_GENERATION_BOM (vibki,status,lastruntime)
VALUES (:NEW.vibki,'NEW',sysdate);
END IF;
END;
看起来很简单,我只是首先尝试更新,如果没有找到,请插入。
但是这个触发器不适用于这个插入语句:
INSERT INTO D2C_EVENT_GENERATION_BOM (vibki) VALUES ('TAS2002/01');
例外:
Error starting at line : 1 in command -
INSERT INTO D2C_EVENT_GENERATION_BOM (vibki) VALUES ('TAS2002/01')
Error report -
ORA-00036: maximum number of recursive SQL levels (50) exceeded
ORA-00036: maximum number of recursive SQL levels (50) exceeded
请有人支持我如何实现这个错误,我在另一个表上使用相同的触发器,唯一的区别是我在 upsert 操作之前进行选择操作以收集一些值,所以我希望这段代码能够轻松工作,但是它不工作。
任何帮助将不胜感激,非常感谢!
【问题讨论】:
标签: oracle plsql triggers upsert