Каскадные хранимые процедуры в MySQL - PullRequest
0 голосов
/ 09 декабря 2011

Вопрос относительно прост.

Можно ли вызвать процедуру в MySQL, в другую?

Пример:

Созданы две процедуры: proc1 и proc2

В proc1 я вызываю proc 2. Таким образом:

BEGIN

IF ( CALL ConsultConsoleAvailableTime(`StartTime`, `PlusTime` ) IS NULL ) THEN
    SELECT 'error';
END IF;

END;

Возможно ли это?Как?Не работал здесь нет.: D

Edit1:

1318 - Неверное количество аргументов для PROCEDURE sistemajogosxbox.ConsultConsoleAvailableTime;ожидается 3, получено 2

Edit2:

1172 - Результат состоит из более чем одного ряда

А теперь?

Ответы [ 2 ]

2 голосов
/ 09 декабря 2011

Просто чтобы проиллюстрировать один способ использования хранимой процедуры в другом:

DELIMITER //
CREATE PROCEDURE setOutputParameter (
    OUT OutputParameter VARCHAR(20)
)
BEGIN

    SELECT 'output' INTO OutputParameter;

END//
DELIMITER ;

DELIMITER //
CREATE PROCEDURE useOutputParameter ()
BEGIN
    CALL setOutputParameter(@tmpOutputParameter);

    IF @tmpOutputParameter = 'output' 
        THEN SELECT 'string: output was returned' AS res;
    END IF;

END//
DELIMITER ;

Процедура setOutputParameter устанавливает значение в свой параметр out, а затем это значение создается в качестве заполнителя в процедуре.setOutputParameter (и в переменную: @tmpOutputParameter, которая затем проверяется в операторе IF..THEN...

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

[править] На основе комментария к записи:

* 1014Параметр INOUT или OUT (доступен только в хранимых процедурах, но не в функциях) внутри хранимой процедуры позволяет вызывающей стороне хранимой процедуры с помощью команды CALL storedprocedurename.. передавать пользовательскую переменную в позицию параметра outвызываемой процедуры - в которой эта же процедура выполняется и передает ей значение. После выполнения вызываемой процедуры, out значение, переданное в пользовательскую переменную, становится доступным.В приведенном выше примере параметр out OutputParameter в хранимой процедуре setOutputParameter потребует передачи ему переменной при вызове, поскольку хранимая процедура setOutputParameter передаст ей значение.Таким образом, фактически, как только код внутри хранимой процедуры useOutputParameter вызывает, если через CALL setOutputParameter(@tmpOutputParameter);, переменная, переданная ей в качестве выходного параметра: @tmpOutputParameter теперь будет содержать строковое значение output, которое остальная часть кодав рамках процедуры useOutputParameter можно использовать ...

Подробнее здесь: http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

0 голосов
/ 09 декабря 2011

Вы можете вызывать одну хранимую процедуру из другой. Я делал это раньше.

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

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