Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Informix Новый топик    Ответить
 Создать функцию с выдачей курсора  [new]
Алексc
Member

Откуда:
Сообщений: 4
Народ посомогите - глядел уже и в хелпах - надо создать функцию в которой делается селект по таблице - и вот этот селект надо выдать из функции. Не нашел как такое изобразить - подскажите - как это оформить...
29 янв 03, 16:13    [117424]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
Daugava
Member

Откуда: Riga-Kiev-Gurzuf
Сообщений: 718
FOREACH cur FOR                                                             
   SELECT bla-bla
     INTO bla-bla
     FROM bla-bla
    WHERE bla-bla
    ORDER BY bla-bla
                                                                              
    RETURN bla-bla
    WITH RESUME;
  END FOREACH;
Основная идея "RETURN WITH RESUME;"
29 янв 03, 19:01    [117667]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Создать функцию с выдачей курсора  [new]
АлександрИ
Member

Откуда:
Сообщений: 4
Подскажите. Ситуация такая же как у Алексса, но источник не запрос, а процедура, которая возвращает несколько строк по нескользо записей в каждой (проще говоря возвращает таблицу). Как правильно оформить foreach?
26 авг 10, 15:54    [9331370]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
АлександрИ
Подскажите. Ситуация такая же как у Алексса, но источник не запрос, а процедура, которая возвращает несколько строк по нескользо записей в каждой (проще говоря возвращает таблицу). Как правильно оформить foreach?
такая же, ага. Вам функция нужна которая будет возвращать строкИ или нет?
26 авг 10, 16:41    [9331924]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
АлександрИ
Member

Откуда:
Сообщений: 4
Да. Получается есть 4 функции, каждая из которых возвращает несколько записей с одинаковым количеством столбцов (например return t1, t2, t3 with resume). Необходимо унифицировать вызов этих функций - создать пятую, которая, в зависимости от переданного ей параметра, вызывает одну из первых четывех и выдает данные, которые вернула вызванная функция.
26 авг 10, 17:00    [9332160]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
а просто execute procedute into cur не работает?


как вариант
select * from table(multiset{some_proc1()}) where param=1
union all
select * from table(multiset{some_proc2()}) where param=2
26 авг 10, 17:29    [9332420]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
ну и динамичский скуль https://www.sql.ru/forum/actualthread.aspx?tid=750825&hl=resume+execute#8629608
26 авг 10, 17:30    [9332425]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
АлександрИ
Member

Откуда:
Сообщений: 4
foreach execute procedure sel_pairs_device(regnC,codeAdm) into _regnC, _koda1, _nrsh1, _flagUst1, _ustNum1, _paraNum2Kl, _regnC2Kl2, _koda2, 
_nrsh2, _flagUst2, _ustNum2, _paraNum2Kl2, _regnCLnk, _kodaLnk, _nrshLnk, _flagUstLnk, _ustNumLnk, _paraNum, _complexParas, _paraSost, 
_sostav, _defectDate, _defectType, _flagPhone, _phone1, _placeSet1, _flagState1, _numP1, _spPhone, _resLdPhone, _resLdStrPhone, 
_resLdStrAbCode, _resLdStrAbName, _phoneServ, _lnkNstd, _flagAvu 
   return _regnC, _koda1, _nrsh1, _flagUst1, _ustNum1, _paraNum2Kl, _regnC2Kl2, _koda2, _nrsh2, _flagUst2, _ustNum2, _paraNum2Kl2, _regnCLnk, 
_kodaLnk, _nrshLnk, _flagUstLnk, _ustNumLnk, _paraNum, _complexParas, _paraSost, _sostav, _defectDate, _defectType, _flagPhone, _phone1, 
_placeSet1, _flagState1, _numP1, _spPhone, _resLdPhone, _resLdStrPhone, _resLdStrAbCode, 
_resLdStrAbName, _phoneServ, _lnkNstd, _flagAvu with resume;
end foreach;
Вот код. Он правильно написан? При проверке server studio ошибки не дает, запускается на выполнение, но после запуска просто идет процес выполнения и результат не выдает. Может я что-то не так написал?

Сообщение было отредактировано: 26 авг 10, 17:56
26 авг 10, 17:36    [9332472]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
Журавлев Денис
Member

Откуда: St.John,NB,CA
Сообщений: 5532
CREATE PROCEDURE test()
RETURNING int,int;
DEFINE r1,r2 int;
 FOREACH cur FOR SELECT 1,1 INTO r1,r2 FROM table(set{1,2})
    RETURN r1,r2 WITH RESUME;
 END FOREACH;
END PROCEDURE;


CREATE PROCEDURE test1()
RETURNING int,int;
DEFINE r1,r2 int;
 
foreach execute procedure test() into r1,r2
return r1,r2 with resume;
END FOREACH;
END PROCEDURE;


execute procedure test1();                    


(expression) (expression)

1 1
1 1

2 row(s) retrieved.
26 авг 10, 17:56    [9332695]     Ответить | Цитировать Сообщить модератору
 Re: Создать функцию с выдачей курсора  [new]
АлександрИ
Member

Откуда:
Сообщений: 4
Спасибо.
26 авг 10, 18:04    [9332761]     Ответить | Цитировать Сообщить модератору
Все форумы / Informix Ответить