2012-06-29 3 views
1

Если я создаю хранимую процедуру в MySQL с параметром OUT или INOUT, это не сработает. Даже если оставить хранимую процедуру пустой. DDL выглядит следующим образом:Параметр OUT или INOUT не работает

CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int) 
BEGIN 

END 

Первый параметр - это обычный параметр IN. Второй является INOUT paremeter (даже если он установлен, как OUT та же проблема продолжает существовать)

Когда я вызвать эту хранимую процедуру, я получаю сообщение об ошибке с указанием:

OUT или INOUT аргумент 2 для обычного db_name. testing_inout не является переменной или NEW-переменной в триггере BEFORE.

Эта ошибка сохраняется, даже если код написан внутри хранимой процедуры. Я запускаю mysql версию 5.1.41.

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

+0

Вероятно, вы должны показать оператор, который вызывает процедуру. –

+0

Я не думаю, что проблема связана с SP, но триггер 'BEFORE', из которого вызывается SP. –

+0

Я согласен с тем, что проблема должна быть с триггером BEFORE, из которого вызывается SP. Эта ошибка возникает, когда я запускаю SP через Navicat. Но когда я вызываю SP из другого SP, я не получаю ошибку. Вывод: способ, которым кнопка запуска Navicat вызывает SP, не работает с аргументами OUT и INOUT. – prince

ответ

4

это работает для меня

mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int) 
    -> BEGIN 
    -> 
    -> END 
    -> ; 
Query OK, 0 rows affected (0.00 sec) 

Второй параметр, потому что это INOUT она должна быть переменной:

mysql> set @c:=1; 
Query OK, 0 rows affected (0.00 sec) 

mysql> call testing_inout(1,@c); 
Query OK, 0 rows affected (0.00 sec) 

, если вы попробуете это будет возвращать 1:

delimiter | 
CREATE DEFINER=`root`@`localhost` PROCEDURE `testing_inout`(`a` int,INOUT `b` int) 
BEGIN 
select b; 
END 
| 
delimiter ; 

mysql> call testing_inout(1,@c); 
+------+ 
| b | 
+------+ 
| 1 | 
+------+ 
1 row in set (0.00 sec) 

Query OK, 0 rows affected (0.00 sec) 
+0

+1 на еще одной ошибке mysql (тоже проверено) –

+1

OP говорит: * 'Когда я ** вызываю ** эту хранимую процедуру, я получаю сообщение об ошибке *. Возможно, проблема не в определении. –

+0

@AndriyM спасибо, я исправил – jcho360

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