Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ref cursor в функциях / 5 сообщений из 5, страница 1 из 1
03.12.2002, 10:19
    #32074963
Oleg Afanasiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ref cursor в функциях
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.
Вопрос актуальный, может кто поделится опытом?
...
Рейтинг: 0 / 0
03.12.2002, 10:44
    #32074992
noname_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ref cursor в функциях
Попробуй так:
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;
...
Рейтинг: 0 / 0
03.12.2002, 10:59
    #32075003
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ref cursor в функциях
Как именно ругается? Какая версия оракла? Проверь сперва, не является ли тип с именем sys_refcursor уже объявленным, в Oracle 9i это точно так. И потом, если функция будет возвращать refcursor, то еще не значит, что ее можно будет напрямую использовать в select'е, для этого потребуются дополнительные телодвижения, опять же зависящие от версии оракла.

Я передаю массив из Delphi через ODAC в pl/sql таблицу, если есть желание- могу показать как.
...
Рейтинг: 0 / 0
03.12.2002, 15:08
    #32075165
.dba
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ref cursor в функциях
>И ещё вопрос.
>Как передать из С++ массив структур в pl/sql.
>Вопрос актуальный, может кто поделится опытом?

вот тут посмотри:
http://ocicpplib.sourceforge.net/

и тут тоже интересно, хотя про именно про курсоры ничего нет:
http://www.codeguru.com/mfc_database/Osql10.shtml
...
Рейтинг: 0 / 0
03.12.2002, 16:50
    #32075237
Oleg Afanasiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ref cursor в функциях
да я ошибся не ругается. :-) Версия 8.1.7 сервера
Это я вчера вечером тупил.А с утра пришёл и всё ок.
Вопрос в том как мне теперь эту функцию
использовать? Как на клиенте создать
эффект как будто он выполнил select а на самом деле
вызвал мою функцию типа ref cursor?
Неважно, даже если нужно сделать какие-то телодвижения,
это нужно для последующего удобства обслуживания.

>Я передаю массив из Delphi через ODAC в pl/sql таблицу,
>если есть желание- могу показать как.

Конечно есть :-)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / ref cursor в функциях / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]