错误:查询没有结果数据的目的地

时间:2012-03-27 12:00:47

标签: sql postgresql triggers

我创建了函数和触发器,如下所示:

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行。 谁能帮我?有什么问题?

2 个答案:

答案 0 :(得分:4)

我认为问题在于你没有对该查询做任何事情。既不是DML也不是将结果返回变量或记录。

答案 1 :(得分:1)

您误解了触发器的基本概念。触发器函数可以操纵它所调用的行。或者它可以执行其他DML语句来操纵数据库中的其他数据。

但是没有办法“返回变量”,因为没有调用实例它可以返回值。

现在,如果您在问题中定义 ,您打算对查询的行做什么,我们可能会提供帮助。

然而,查询本身似乎没有任何意义。为什么表productid中的max(ticketid)匹配ticket

此外,您正在创建触发器AFTER INSERT。在这种情况下,触发函数中的RETURN NEW是非感性的。

你真的需要首先掌握整个概念 首先阅读chapter Triggers in the manual