[英]IBM DB2 Create Trigger after insert
我在尝试为我的db2数据库创建触发器时遇到了麻烦。 这是我第一次尝试使用触发器,因此请原谅我的愚蠢行为。
我有3张桌子,看起来像这样:
现在我正在尝试创建一个触发器,当将新行插入表bertram中时,该触发器将自动将行插入表connor中。 它必须获取新创建的bertram行的ID,并将表arnold的所有行(其中use设置为1)插入,并将其ID放入connor行的相应arnoldid列中。 所有这些connor行中的pos列也必须从1编号到新行的编号。
我走了这么远,但是我认为这是非常错误的:
CREATE TRIGGER usage AFTER INSERT ON bertram REFERENCING NEW AS newbert FOR EACH ROW
BEGIN ATOMIC
SET newpos = 1;
FOR looop AS mycursor CURSOR FOR SELECT * FROM arnold WHERE (use = 1) DO
INSERT INTO connor (pos, bertramid, arnoldid)
VALUES (newpos, newbert.id, mycursor.id);
SET newpos = newpos +1;
END FOR;
END
谢谢你的帮助!!! :(
我没有做过很多触发器编程(就此而言,还是UDF),但是任何时候在 SQL 内部使用CURSOR
时,通常都做错了。
我相信(但尚未测试)以下方法可以工作:
CREATE TRIGGER usage AFTER INSERT ON Bertram REFERENCING NEW ROW AS Newbert
FOR EACH ROW MODE DB2ROW
BEGIN ATOMIC
INSERT INTO Connor(bertramId, arnoldId, pos) -- elements reordered for clarity
SELECT newbert.id, a.id, (SELECT COUNT(b.id)
FROM Arnold as b
WHERE b.use = 1
AND b.id < a.id)
FROM Arnold as a
WHERE a.use = 1;
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.