Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Firebird, Interbase > процедуры и селекты из нее в interbase


Автор: kichum 14.1.2011, 23:10
 Здравствуйте. Я в interbase 6.5 полный нуль, вот и возник вопрос. Я написал процедуру:
Код

create procedure GET_ONE
returns (
    ONE integer)
as
begin
  ONE = 1;
end


Я ее могу вызвать через 
Код

EXECUTE PROCEDURE GET_ONE;
 и мне все правильно выдает: ONE=1. Но я хочу использовать возвращаемое процедурой значение в селект запросе (ну и insert тоже). При попытке вставить в запрос execute - выдается ошибка. Но если я использую примерно такую конструкцию
Код

select * from tbl_name where id=(select ONE from get_one);

мне говорит, что ONE=NULL, и ничего я с этим поделать не могу. Как использовать возвращаемое значение в SQL запросе? Можно пример?
P.S.: Извиняюсь, если вопрос очень тупой или где-то на форуме (интернете) есть ответ, я его искал и не нашел.

Автор: Akella 15.1.2011, 12:13
Код

create procedure GET_ONE
returns (
    ONE integer)
as
begin
  ONE = 1;
  suspend;
end


Код
select * from tbl_name where id in (select ONE from get_one);

Автор: kichum 15.1.2011, 19:14
Большое спасибо. Вот небольшая справка будущим поколениям.
Цитата

SUSPEND  В проседуре выбора SUSPEND возвращает выходные значения, если любой, вызываемому приложению. Не рекомендуется для исполняемых процедур

http://ais.khstu.ru/Reference/interbase/CREATE_PROCEDURE.htm

Автор: Данкинг 15.1.2011, 20:33
 smile 
kichum, ты из этой справки сам что-нибудь понял? smile Suspend выполнение ХП останавливает - это да.

Автор: Akella 15.1.2011, 21:00
Цитата(Данкинг @  15.1.2011,  20:33 Найти цитируемый пост)
 Suspend выполнение ХП останавливает - это да.

Нет, не останавливает, а выводит результат "наружу" smile

Автор: Данкинг 15.1.2011, 21:53
Цитата(Akella @  15.1.2011,  21:00 Найти цитируемый пост)
Нет, не останавливает, а выводит результат "наружу"

Ну, типа того, в книге Бондаря - "Осуществялет временную приостановку выполнения ХП и передачу управления вызвавшей программе". smile 

Автор: Akella 16.1.2011, 13:07
временную приостановку... и код дальше всё равно продолжает работать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)