Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.084 c