2012-01-10 4 views
7

Я пытаюсь из функций и триггеров Int PostGreSQL, однако я имею проблему, когда функция вызывается он дает мне ошибкуPostgreSQL функций и триггеров

ОШИБКА: контроль достиг конца процедуры запуска без возврата

эта конкретная процедура только выполняет вставку в команде, так что я не понимаю, почему он должен вернуться

это сценарий:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN 
    insert into Audit values('k',124,'l'); 
END; 
$tree_stamp$ 
LANGUAGE plpgsql; 

create trigger forest_aud_ins after insert on forest 
for each row execute procedure forest_aud_func() 

insert into forest values('Blue',1600,'Malta','Health Ltd') 

ответ

16

В сообщении об ошибке сообщается все. Вам нужно сделать возврат из функции триггера:

CREATE OR REPLACE FUNCTION forest_aud_func() returns trigger as $tree_stamp$ 
BEGIN 
    insert into Audit values('k',124,'l'); 
    return new; 
END; 
$tree_stamp$ 
LANGUAGE plpgsql; 

От the manual:

Функция триггер должен возвращать либо NULL или значение записи/строки, имеющие в точности структуру таблицы триггер был уволен для.

+0

ОК спасибо, сделал, как вы сказали, теперь он дал мне эту ошибку: ОШИБКА: дублирующее значение ключа нарушает уникальное ограничение «audit_pk» ДЕТАЛИ: Key (au_code) = (124) уже существует. i cheked в таблице и 124 еще не существует любые идеи? – Karl

+0

Какую транзакцию вы отправляете при возникновении этой ошибки? – Kuberchaun

+0

@Karl: По-видимому, у вас есть первичный ключ в таблице «audit», который вы нарушаете при вставке значений аудита. Эта проблема не имеет ничего общего с написанием триггера. –

Смежные вопросы