Просто чтобы проиллюстрировать один способ использования хранимой процедуры в другом:
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