Модераторы: 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
Сообщение
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
Сообщение
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.
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 17 май 2010, 10:14
это еще зависит от версии сервера. раньше были сложности с передачей выражений в параметры.
Вообще конструкция, которая получилась, выглядит слишком замудренно. Может, имеет смысл вовремя остановиться?
-
ERrorMAKros
- Сообщения: 37
- Зарегистрирован: 18 янв 2007, 01:05
Сообщение
ERrorMAKros » 17 май 2010, 10:35
Такого рода решения будут крайне редко применяться на практике. Данный вопрос был скорее - разбором спецификаций синтаксиса языка Firebird SQL, чем жизненно необходимым решением какой то поставленной для программиста задачи