ОШИБКА: у запроса нет места назначения для данных результата - PullRequest
2 голосов
/ 27 марта 2012

Я создал функцию и запустил ее следующим образом:

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);

Я получаю сообщение об ошибке: ОШИБКА: у запроса нет пункта назначения для результатаСОВЕТ данных: если вы хотите отменить результаты SELECT, используйте вместо этого PERFORM.КОНТЕКСТ: PL / pgSQL функция "new_ticket" строка 2 в операторе SQL.Может кто-нибудь мне помочь?В чем там проблема?

Ответы [ 2 ]

4 голосов
/ 27 марта 2012

Я думаю, проблема в том, что вы ничего не делаете с этим запросом. Ни DML, ни возврат результата в переменную или запись.

1 голос
/ 27 марта 2012

Вы неверно истолковали базовую концепцию триггера .Триггерная функция может управлять строкой, для которой она была вызвана.Или он может выполнять дополнительные операторы DML для манипулирования другими данными в базе данных.

Но нет способа "вернуть переменную", потому что нет вызывающего экземпляра, которому он мог бы возвращать значения.

Теперь, если вы зададите в своем вопросе , что вы собираетесь делать со строкой, которую вы запрашиваете, мы могли бы помочь.

Однако сам запрос, похоже, не даетсмысл.Почему productid соответствует max(ticketid) в таблице ticket?

Кроме того, вы создаете триггер AFTER INSERT.В этом случае в функции триггера он не равен RETURN NEW.

Вам действительно нужно сначала понять всю концепцию.
Начните с прочтения главы Триггеры в руководстве .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...