Страница 1 из 1

Параметр хранимой процедура в виде хранимой процедуры???

Добавлено: 16 май 2010, 11:40
ERrorMAKros
Добрый день, есть такая вот простая процедура:

Код: Выделить всё

CREATE PROCEDURE MYPROC(NUM INTEGER)
RETURNS (RET INTEGER)
AS BEGIN
RET=:NUM+10;
SUSPEND;
END
При обычной выборке результата в select все как обычно

Код: Выделить всё

select res.RET from MYPROC(20) res
/* в ответ получим колнуку "B" со значением 30 */
А как в качестве параметра процедуры MYPROC указать другую процедуру? ...что-то типа:

Код: Выделить всё

select res.RET from MYPROC(MYPROC(20)) res
/* процедура MYPROC должна получить входной результат MYPROC(20)*/

Re: Параметр хранимой процедура в виде хранимой процедуры???

Добавлено: 16 май 2010, 15:09
kdv
нужно определиться, одно значение из процедуры предполагается получать, или множество. Если одно, то тогда процедуру нужно вызывать как
execute procedure ... returning values, и не писать в ней suspend. Если множество, то тогда не просто select, а for select.
Читайте
http://www.ibase.ru/devinfo/sp_call.htm

Re: Параметр хранимой процедура в виде хранимой процедуры???

Добавлено: 16 май 2010, 23:38
ERrorMAKros
Спасибо, это понятно. Я имел в виду как в параметре процедуры вызвать результат работы др. процедуры, если это возможно?! Имеется в виду - позволяет ли sql синтаксис выполнить процедуру в качестве функции?
Пытался сделать так:

Код: Выделить всё

select res.RET from MYPROC(
   select first 1 r.RET from MYPROC2(20) r
) res
Получаю в ответ:
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, column 4.
select.

Re: Параметр хранимой процедура в виде хранимой процедуры???

Добавлено: 17 май 2010, 09:39
ERrorMAKros
Решение оказалось таким:

Код: Выделить всё

select res.RET from MYPROC(
   (select first 1 r.RET from MYPROC2(20) r)
) res

Re: Параметр хранимой процедура в виде хранимой процедуры???

Добавлено: 17 май 2010, 10:14
kdv
это еще зависит от версии сервера. раньше были сложности с передачей выражений в параметры.

Вообще конструкция, которая получилась, выглядит слишком замудренно. Может, имеет смысл вовремя остановиться? :-)

Re: Параметр хранимой процедура в виде хранимой процедуры???

Добавлено: 17 май 2010, 10:35
ERrorMAKros
Такого рода решения будут крайне редко применяться на практике. Данный вопрос был скорее - разбором спецификаций синтаксиса языка Firebird SQL, чем жизненно необходимым решением какой то поставленной для программиста задачи :)