хранимая процедура mysql: параметр out - PullRequest
26 голосов
/ 11 июля 2009

У меня есть хранимая процедура mysql из этого ( Google Book ), и один из примеров:

DELIMITER $$

DROP PROCEDURE IF EXISTS my_sqrt$$
CREATE PROCEDURE my_sqrt(input_number INT, OUT out_number FLOAT)
BEGIN
    SET out_number=SQRT(input_number);
END$$

DELIMITER ;

Процедура компилируется нормально. (Я использую MySQL Query Browser в Ubuntu).

Однако, когда я вызываю процедуру:

CALL my_sqrt(4,@out_value);

(также в браузере запросов)

Возвращает ошибку:

(1064) check the manual that correspond to the...

Почему этот пример не работает?

Ответы [ 6 ]

35 голосов
/ 11 июля 2009

Невозможно скопировать. У меня все работало нормально:

mysql> CALL my_sqrt(4, @out_value);
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @out_value;
+------------+
| @out_value |
+------------+
| 2          | 
+------------+
1 row in set (0.00 sec)

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

6 голосов
/ 19 октября 2015

Вы должны использовать правильную подпись для входного параметра * IN отсутствует в приведенном ниже коде.

CREATE PROCEDURE my_sqrt(IN input_number INT, OUT out_number FLOAT)
2 голосов
/ 07 октября 2014

Я знаю, что это старая ветка, но если кто-то ищет ответ, почему его процедуры не работают в рабочей среде, и думает, что единственный результат - это "Запрос отменен" или что-то подобное без подсказок:

вывод с ошибками или проблемами скрыт. Я не знаю почему, я понимаю, это раздражает, но оно есть. просто наведите курсор на строку над сообщением, она превратится в двойную стрелку (вверх и вниз), затем вы можете нажать и перетащить эту строку вверх, после чего вы увидите консоль с пропущенным сообщением!

1 голос
/ 12 мая 2016
SET out_number=SQRT(input_number); 

Вместо этого напишите:

select SQRT(input_number); 

Пожалуйста, не пишите SET out_number, и ваш входной параметр должен быть:

PROCEDURE `test`.`my_sqrt`(IN input_number INT, OUT out_number FLOAT) 
1 голос
/ 11 июля 2009

Я просто попытался вызвать функцию в терминале, а не в MySQL Query Browser, и она работает. Похоже, я что-то не так делаю в этой программе ...

Я не знаю, что, поскольку я ранее успешно вызывал некоторые процедуры (но там, где нет параметров out) ...

Для этого я ввел

CALL my_sqrt(4,@out_value);
SELECT @out_value;

И это приводит к ошибке:

У вас ошибка в синтаксисе SQL; проверьте руководство, которое соответствует ваша версия сервера MySQL для правильный синтаксис для использования рядом с «SELECT» @out_value 'в строке 2

Странно, если я напишу просто:

CALL my_sqrt(4,@out_value); 

В результате появляется сообщение: «Запрос отменен»

Полагаю, сейчас я буду использовать только терминал ...

0 голосов
/ 11 января 2019

Если вы звоните из хранимой процедуры, не используйте @. В моем случае это возвращает 0

CALL SP_NAME (L_OUTPUT_PARAM)

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