我创建了函数和触发器,如下所示:
CREATE OR REPLACE FUNCTION New_Ticket()
RETURNS TRIGGER AS
$$BEGIN
SELECT * FROM Ticket WHERE productID=(SELECT MAX(ticketID) FROM Ticket);
RETURN NEW;
END$$
LANGUAGE PLPGSQL;
CREATE TRIGGER New_TicketTr
AFTER INSERT ON Ticket
FOR EACH ROW execute procedure New_Ticket();
按照以下方式插入后:
INSERT INTO Ticket (ticketID, Problem, Status, Priority,LoggedTime,CustomerID,ProductID) VALUES
(1, 'Cannot play games.', 'open', 1,'2005-05-13 07:15:31.123456789',1,1);
我收到错误消息:ERROR:查询没有结果数据的目的地 提示:如果要放弃SELECT的结果,请改用PERFORM。 语境:SQL语句中的PL / pgSQL函数“new_ticket”第2行。 谁能帮我?有什么问题?
答案 0 :(得分:4)
我认为问题在于你没有对该查询做任何事情。既不是DML也不是将结果返回变量或记录。
答案 1 :(得分:1)
您误解了触发器的基本概念。触发器函数可以操纵它所调用的行。或者它可以执行其他DML语句来操纵数据库中的其他数据。
但是没有办法“返回变量”,因为没有调用实例它可以返回值。
现在,如果您在问题中定义 ,您打算对查询的行做什么,我们可能会提供帮助。
然而,查询本身似乎没有任何意义。为什么表productid
中的max(ticketid)
匹配ticket
?
此外,您正在创建触发器AFTER INSERT
。在这种情况下,触发函数中的RETURN NEW
是非感性的。
你真的需要首先掌握整个概念 首先阅读chapter Triggers in the manual。