programing

SQL: 트리거 및 프로시저

javajsp 2023. 10. 21. 09:57

SQL: 트리거 및 프로시저

저는 물품 목록이 있는 테이블 « 블로그 »를 가지고 있습니다.저는 모든 항목의 댓글 수를 기재한 열을 추가하고 싶습니다.저는 이 번호도 자동으로 업데이트가 되었으면 합니다.

그래서 절차를 만들었습니다.

DELIMITER |
CREATE PROCEDURE Procedure_comments()
BEGIN
UPDATE blog SET nb_comment = (SELECT COUNT(Comment.id) 
                              FROM Comment 
                              WHERE Comment.blog_id = blog.id);
END|

댓글을 삽입/삭제할 때 «적으로 절차를 시작할 수 있는 트리거를 추가하려고 했습니다.

CREATE TRIGGER trigger_nb_comments 
AFTER INSERT ON Comment 
FOR EACH ROW EXECUTE Procedure_comments()|

그러나… 오류가 발생했습니다:

오류 1336 (0A000):저장된 함수 또는 트리거에서 동적 SQL이 허용되지 않습니다.

그럼… 메인 테이블 « 블로그 »의 댓글 수를 자동으로 업데이트하려면 어떻게 해야 합니까?

도와주셔서 정말 감사합니다.

제안한 트리거가 다시 계산/업데이트됩니다.nb_comment사용자가 주석을 삽입하고 주석 삭제를 처리하지 않을 때마다 블로그 테이블의 모든 행에 적용됩니다.

트리거 대신 간단한 보기를 사용하는 것이 좋습니다.

CREATE VIEW vw_blog
AS
SELECT b.id, b.title, b.body,
       COUNT(*)  AS nb_comment
FROM blog b
JOIN `Comment` c
  ON b.id = c.blog_id
GROUP BY b.id, b.title, b.body;

SqlFiddleDemo

출력:

╔═════╦════════════════════╦═══════════════════════════════════╦════════════╗
║ id  ║       title        ║               body                ║ nb_comment ║
╠═════╬════════════════════╬═══════════════════════════════════╬════════════╣
║  1  ║ SQL Server         ║ SQL Server...                     ║          3 ║
║  2  ║ MySQL performance  ║ To improve performance invest...  ║          1 ║
╚═════╩════════════════════╩═══════════════════════════════════╩════════════╝

언급URL : https://stackoverflow.com/questions/35803088/sql-trigger-and-procedure