【发布时间】:2015-03-19 18:18:26
【问题描述】:
我的数据库中有三个表 - Students、Books 和 Books2student。
Students表有StudentID, First_Name, Last_Name。Books表有ISBN_no, name, no. of copies available。Books2Students具有StudentID, books issued, issue date, due date的表。
我想创建一个触发器,当一个学生从books2students 中删除时,Books 表中的no. of copies 应该增加,如果我在books2student 中插入一本书,那么书籍中的no of copies 应该减少.
我写了一个函数和触发器,但函数中出现错误
CREATE FUNCTION student_to_book() RETURNS trigger AS '
BEGIN
IF tg_op = ''DELETE'' THEN
UPDATE books
SET books.no_of_copies_available = no_of_copies_available+1
WHERE Books2Students.Book_Issued=books.ISBN_no;
END IF;
IF tg_op = ''INSERT'' THEN
UPDATE books
SET books.no_of_copies_available = no_of_copies_available-1
WHERE Books2Students.Book_Issued=books.ISBN_no;
END IF;
END
' LANGUAGE plpgsql;
我得到错误一个错误:
ERROR: missing FROM-clause entry for table "books2students" Where: PL/pgSQL function student_to_book() line 10 at SQL statement
【问题讨论】:
-
要引用正在插入或删除的行(已触发触发器),语法为
NEW.book_issued或OLD.book_issued而不是Books2Students.Book_Issued。这就是错误的原因。有关更多信息,请参阅 postgres 文档。
标签: database postgresql triggers plpgsql