我在尝试为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
感谢您的帮助!!! :(
答案 0 :(得分:1)
我没有做过很多触发器编程(或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