|
ref cursor в функциях
|
|||
---|---|---|---|
#18+
Hужна неотложная ;-) помощь Олла в таком вопросе Я хочу использовать тип ref cursor в объявлении функции чтобы заставить её возвращать не одно значение а набор данных (вести себя как select), после чего использовать эту функцию у клиента дабы он не делал произвольных запросов а юзал мою функцию и получал то что надо. Ho что-то не выходит у меня эта весч. Пытался делать так: create or replace type sys_refcursor IS REF CURSOR; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ так нельзя ругается что слово ref не на своём месте. Тоесть тип в глобальном смысле нельзя объявить. create or replace function F return sys_refcursor is v_cur sys_refcursor; begin open v_cur for select last_name from employees where rownum < 11; return v_cur; end F; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Это пример с OTN но вопрос в том, как объявить тип sys_refcursor ? И как потом такую функцию вызвать у клиента чтобы получить эффект select-а? Думал про вариант построчно пересылать на клиента полученный набор но это есть нехорошо :-( Пытался сделать в пакете: create or replace package pack is type sys_refcursor is REF CURSOR; function F() return sys_refcursor; end pack; Тут вроде не ругается но проблемы в теле: create or replace package body pack is create or replace function F return sys_refcursor is v_cur sys_refcursor; begin open v_cur for select last_name from employees where rownum < 11; return v_cur; end F; end pack; Хотя я тут не пойму чего бы ему не отработать? Интересны любые предложения или мнения, очень хочется реализовать именно такую схему, потому как нам нужно будет рассылать клиентскую часть по филиалам и в случае изменений в отчётах или ещё в чём-то снова рассылать им новые версии. А так очень даже красиво может получится :-)) И ещё вопрос. Как передать из С++ массив структур в pl/sql. Вопрос актуальный, может кто поделится опытом? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2002, 10:19 |
|
ref cursor в функциях
|
|||
---|---|---|---|
#18+
Попробуй так: create or replace package pack is type sys_refcursor is REF CURSOR; function F return sys_refcursor; end pack; create or replace package body pack is function F return sys_refcursor is v_cur sys_refcursor; begin open v_cur for select ename from emp where rownum < 11; return v_cur; end F; end pack; ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2002, 10:44 |
|
ref cursor в функциях
|
|||
---|---|---|---|
#18+
Как именно ругается? Какая версия оракла? Проверь сперва, не является ли тип с именем sys_refcursor уже объявленным, в Oracle 9i это точно так. И потом, если функция будет возвращать refcursor, то еще не значит, что ее можно будет напрямую использовать в select'е, для этого потребуются дополнительные телодвижения, опять же зависящие от версии оракла. Я передаю массив из Delphi через ODAC в pl/sql таблицу, если есть желание- могу показать как. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2002, 10:59 |
|
ref cursor в функциях
|
|||
---|---|---|---|
#18+
>И ещё вопрос. >Как передать из С++ массив структур в pl/sql. >Вопрос актуальный, может кто поделится опытом? вот тут посмотри: http://ocicpplib.sourceforge.net/ и тут тоже интересно, хотя про именно про курсоры ничего нет: http://www.codeguru.com/mfc_database/Osql10.shtml ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2002, 15:08 |
|
ref cursor в функциях
|
|||
---|---|---|---|
#18+
да я ошибся не ругается. :-) Версия 8.1.7 сервера Это я вчера вечером тупил.А с утра пришёл и всё ок. Вопрос в том как мне теперь эту функцию использовать? Как на клиенте создать эффект как будто он выполнил select а на самом деле вызвал мою функцию типа ref cursor? Неважно, даже если нужно сделать какие-то телодвижения, это нужно для последующего удобства обслуживания. >Я передаю массив из Delphi через ODAC в pl/sql таблицу, >если есть желание- могу показать как. Конечно есть :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2002, 16:50 |
|
|
start [/forum/moderation_log.php?user_name=baksaraev]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 390ms |
total: | 552ms |
0 / 0 |