2014-11-20 6 views
0

У меня есть проблема:Не разрешается возвращать результирующий набор из триггера

Я создал процедуру:

CREATE PROCEDURE `tran_sp`() 
BEGIN 
    SELECT 'procedure runned!'; 
END 
$ 

Это работает!

mysql> CALL tran_sp()$ 
+-------------------+ 
| procedure runned! | 
+-------------------+ 
| procedure runned! | 
+-------------------+ 
1 row in set (0.00 sec) 

Затем я создал триггер:

mysql> CREATE TRIGGER my_trigger1 
    ->  AFTER INSERT ON users 
    ->  FOR EACH ROW 
    -> BEGIN 
    ->   CALL tran_sp(); 
    -> END$ 


mysql> INSERT INTO users VALUES(166,156)$ 

ОШИБКА 1415 (0A000): Не разрешено возвращать результирующий набор из триггера MySQL>

Помогите мне пожалуйста.

+2

Разве это не дубликат с ответом: http://stackoverflow.com/a/12474855? –

+0

Возможный дубликат [не разрешено возвращать набор результатов из триггера mysql] (http://stackoverflow.com/questions/12474489/not-allowed-to-return-a-resultset-from-a-trigger-mysql) – peter

ответ

3

Исключение я думаю достаточно ясно.

Вы можете выполнять дополнительные операции внутри триггера (вызывать SP, выполнять операции вставки/обновления/удаления, ...), но всем этим не разрешено возвращать какой-либо результат.

Это означает, что SP с простым предложением select внутри не допускается. Если вместо этого вы должны использовать этот оператор select в цикле, например, для выполнения обновлений или схожих, это будет разрешено, поскольку вы ничего не вернете.

Причина в том, что оператор insert/update/delete ничего не может вернуть, он не может вернуть результирующий набор хранимой процедуры, и поэтому вы не должны пытаться вернуть его внутри триггера.

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