【发布时间】:2021-12-31 03:20:26
【问题描述】:
我正在研究如何在 POSTGRESQL 中创建触发器和存储过程,我的任务是更新 ALBUM 表中名为 num_long_title_songs 的列。
需要统计一个名为songs的表中超过12个字符的歌曲的数量,然后更新ALBUM中该列的值。
我用 for 循环创建了下一个查询,这正是我想要的:
do $$
begin
FOR i IN 1..100 LOOP
UPDATE ALBUM
SET num_long_title_songs =(SELECT count(s.title)
FROM ALBUM a,SONG s
WHERE a.id_album=s.id_album
AND LENGTH(s.title) > 12
AND a.id_album=i
GROUP BY a.id_album
ORDER BY a.id_album)
WHERE id_album IN (SELECT a.id_album
FROM ALBUM a,SONG s
WHERE a.id_album=s.id_album
AND LENGTH(s.title) > 12
AND a.id_album=i
GROUP BY a.id_album
ORDER BY a.id_album);
-- i will take on the values 1,2,3,4,5,6,7,8,9,10 within the loop
END LOOP;
END; $$
问题是我需要创建一个存储过程才能触发。我尝试将它放在 CREATE FUNCTION 结构中,但我无法创建它...你能帮我了解如何将这个“for”循环放在函数中吗?
【问题讨论】:
-
你不需要循环。你不需要一个函数。你不需要触发器。 [你应该使用
JOIN语法] -
请使用现代连接语法,而不是 1989 年以逗号分隔的表列表。
-
@wildplasser 我确实需要一个触发器和一个函数,但对于接下来的步骤,我认为我无法正确解释该练习。我想知道如何将 for 放在函数中,以便稍后在触发器中使用它:c 感谢有关 Join 的建议,我会检查它:D
-
@TheImpaler 我将使用它们:D 谢谢
标签: sql postgresql for-loop stored-procedures triggers