Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

ora sys_refcursor (11g)   Найти похожие ветки 

 
кгшзх ©   (2015-12-16 08:48) [0]

функция возвращает рефкурсор, построенный по произвольному выражению, переданному параметром.
каким макаром написать select из него чтобы сразу получился рекордсет?

в девелопере:
select myfunc(.......) from dual => вижу одну строку выборки с одним полем (сам курсор)

если тыцнуть в ячейку курсора, то девелопер развертывает курсор в нормальный рекордсет.

how?


 
Limpo ©   (2015-12-16 08:56) [1]

Удалено модератором


 
Кщд ©   (2015-12-16 13:15) [2]

код myfunc?


 
Кщд ©   (2015-12-16 13:18) [3]

ах, 11g...
тогда - всё просто: dbms_sql.describe_columns


 
кгшзх ©   (2015-12-16 17:28) [4]

проблема не в том, что мне неизвестны поля курсора.
они мне известны еще до его открытия.
проблема в том, что мне некуда его фетчить так как нету sometable%rowtype

а нету его потому, что сама таблица живет на другом сервере, причем не обязательно оракловом.

схематично:
получил я clob через utl_http
внутри xml с выборкой на стороннем сервере
пробегаюсь по первой строке, получаю список полей и попутно склеиваю sql для селекта из этого xml.

дальше делаю open mycur for mydynsql using :myxmltypefromclob

открылося.
дальше можно было бы зафетчить и сделать функцию как piplined и получить выборку.

но некуда делать into

так как функция должна быть одна (ну типа библиотечная) а юзают ее прикладные программисты.


 
Кщд ©   (2015-12-17 09:46) [5]

задача в чем? кто и где должен видеть выборку?


 
кгшзх ©   (2015-12-17 11:09) [6]

в опчем есть некий движок для распределенного доступа к разнородным источникам данных.
доступ к нему (сейчас) возможен из самых различных клиентских сред vbs, office-vba, js в браузере, win32 приложения, etc ...

и значитсо пишется клиентский пакет для доступа из plsql. транспорт уже работает.

остановился на этапе:
выполнился указанный мной sqlзапрос на postgresql (ну например на нем)
пришел clob с выборкой (внутри лежит xml)
я разобрал что там внутри и сформировал sql для xml (select value(t).extract("./row/@f1").getstringval() as f1 ........)
сделал ему open for ... using XMLType(MyClob)

дальше хотелось бы развернуть его в датасет, чтобы конечный разраб мог использовать функцию в своих объединениях.

пока же ему приходится определять конкретный рекорд для фетча конкретного своего запроса и скроллить.

а в объединениях оно пока недоступно


 
Кщд ©   (2015-12-17 11:48) [7]

>кгшзх ©   (17.12.15 11:09) [6]
т.е. речь о том, что нужно вернуть на клиента
тогда отдавать
1. либо курсор + список полей из него (полученных через dbms_sql)
2. либо тот же XML определенного вида (позволяющий на клиенте сформировать "recordset")

и в том, и в другом случае "recordset" формирует клиент


 
кгшзх ©   (2015-12-17 12:54) [8]

на клиента как раз ничего передавать не надо.
на клиенте есть свои средства доступа к этому двиглу

речь идет о том, чтобы разраб plsql кода пользовался двиглом внутри сервера.


 
Кщд ©   (2015-12-17 13:27) [9]

серебряной пули нет
Oracle не умеет отдавать "recordset" с произвольным кол-вом полей
оба пункта из "Кщд ©   (17.12.15 11:48) [7]" могут быть использованы в хранимом pl/sql-коде



Страницы: 1 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
15-1448011257
Сергей Суровцев
2015-11-20 12:20
2017.01.15
Вот и про нас вспомнили


4-1280829127
wikasim
2010-08-03 13:52
2017.01.15
Как узнать полное имя файла зная его краткое?


4-1281020267
Danger
2010-08-05 18:57
2017.01.15
SQLite в winapi-приложении


15-1445860992
DayGaykin
2015-10-26 15:03
2017.01.15
PHP и Java для Web


15-1451124375
megavoid
2015-12-26 13:06
2017.01.15
Дамы и господа, не забываем про round :)))