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

Модераторы: kdv, CyberMax

Ответить
ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

Сообщение ERrorMAKros » 16 май 2010, 11:40

Добрый день, есть такая вот простая процедура:

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

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)*/

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 16 май 2010, 15:09

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

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

Сообщение ERrorMAKros » 16 май 2010, 23:38

Спасибо, это понятно. Я имел в виду как в параметре процедуры вызвать результат работы др. процедуры, если это возможно?! Имеется в виду - позволяет ли 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.

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

Сообщение ERrorMAKros » 17 май 2010, 09:39

Решение оказалось таким:

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

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

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

Сообщение kdv » 17 май 2010, 10:14

это еще зависит от версии сервера. раньше были сложности с передачей выражений в параметры.

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

ERrorMAKros
Сообщения: 37
Зарегистрирован: 18 янв 2007, 01:05

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

Сообщение ERrorMAKros » 17 май 2010, 10:35

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

Ответить