【发布时间】:2011-03-16 19:27:33
【问题描述】:
我创建了一个触发器,它适用于 2 个这样的表: - 在表 A (GEDDFILES) 上插入新行时,表 B(GEDDIRS) 上的数字字段将增加。
代码正在编译且没有错误,但它不起作用。代码如下:
CREATE OR REPLACE TRIGGER "A"."TRGMAJNRFIC" AFTER
INSERT ON "A"."GEDFILES" FOR EACH ROW DECLARE
wtmpnrfic number;
BEGIN
SELECT MAX(OBJNRFICHIERS) INTO wtmpnrfic from GEDDirs WHERE ID= :new.ID;
UPDATE GEDDirs SET OBJNRFICHIERS = wtmpnrfic+1 WHERE ID=:new.id;
END;
表已标准化,来自 GEDDIRS(字段 ID)的 PK 是表 GEDFILES(字段 ID)中的 FK
我不知道问题出在哪里,即使是一个小问题。
表 GEDFILES 中的字段 OBJNRFICHIERS 为空。当我试图增加它的价值时,这会是一个问题吗?
【问题讨论】:
-
看起来您正试图在表中维护“记录数”。您应该意识到,在存在并发会话的情况下,这将不起作用,为相同的
GEDDirs.ID添加新行到GEDFILES。OBJNRFICHIERS中的数据很可能会变成垃圾。 -
是的,你是对的!我应该如何解决这个问题?你能给出一个替代解决方案吗?最好的问候,
-
添加 DBMS_OUTPUT.PUT_LINE('tirgger works' );为您的触发器并连接到 dmbs 输出。