|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
Вопрос, наверное, ламерский, но мы не стеснительные Есть куча кода, который возвращает выборки с помощью out-параметра SYS_REFCURSOR. Процедуры выглядят где-то так: Код: plaintext 1. 2. 3. 4.
Насколько я понял, APEX хочет текст запроса либо напрямую, либо чтобы его возвращала процедура, но это наводит на грустную мысль о написании мега-обертки, конвертирующей курсор с данными в запрос, его возвращающий, что пугает. Есть ли ПРОСТОЙ способ пользовать такие процедуры как источники данных для LOV и отчетов? С наскоку в документации/форумах по этой теме ничего не нашел :( P.S. Apex будет использоваться встроенный в 11g. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2008, 09:31 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
С лёту идея такая: написать функцию обертку, которая будет возвращать этот самый refcursor и использовать её в запросах. Допустим есть процедура Код: plaintext 1. 2. 3. 4. 5. 6.
Функция будет выглядеть так: Код: plaintext 1. 2. 3. 4. 5. 6.
Запрос для репорта или LOV примерно так: Код: plaintext 1. 2. 3.
Причесать только всё это дело, я особо с рефкурсорами и вложенными таблицами не работал, наверняка можно и красивее запрос сделать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2008, 13:38 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
pipelined function ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2008, 15:08 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
Отчетам все равно нужна структура таблицы. Поэтому я дорабатываю процедуры: делаю временные таблицы (tt_table_name), в конце таблицы сливаю в ней данный, а уже потом открываю курсор - Open rc1 for Select*from tt_table_name; Сохраняется старая функциональность, и в отчете можно использовать данные из tt_table_name ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2008, 14:46 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
RA\/ENВопрос, наверное, ламерский, но мы не стеснительные Есть куча кода, который возвращает выборки с помощью out-параметра SYS_REFCURSOR. Процедуры выглядят где-то так: Код: sql 1. 2. 3. 4. 5.
Вопрос - как бы их попроще использовать в LOV и отчетах APEX? Насколько я понял, APEX хочет текст запроса либо напрямую, либо чтобы его возвращала процедура, но это наводит на грустную мысль о написании мега-обертки, конвертирующей курсор с данными в запрос, его возвращающий, что пугает. Есть ли ПРОСТОЙ способ пользовать такие процедуры как источники данных для LOV и отчетов? С наскоку в документации/форумах по этой теме ничего не нашел :( P.S. Apex будет использоваться встроенный в 11g.Абсолютно аналогичная ситуация возникла. Я правильно понимаю, что за прошедшие 4 года ничего нового для работы с sys_refcursor в апексе не появилось? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 15:40 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
rockclimber, Зачем вообще нужно SYS_REFCURSOR куда-то передавать всюду? И вообще, работать с SYS_REFCURSOR не пугает, а написать обертку пугает? Ответ уже был дан: pipelined function ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:00 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
SvDevrockclimber, Зачем вообще нужно SYS_REFCURSOR куда-то передавать всюду?Мне - не нужно. Просто я нарасхваливал апекс, все слушали развесив уши, а потом сказали - "да, круто, но SYS_REFCURSOR и нее... это самое". Теперь вот думаю, как все это спихнуть с себя или переубедить. SvDevИ вообще, работать с SYS_REFCURSOR не пугает, а написать обертку пугает? Есть работающая хрень в экселе - по функционалу идентичная Tabular Form (UPDATE нескольких строк сразу в таблице). Она собирает данные в строку особого формата, через VBA и ODBC вызывает процедуру с рефкурсором, пихает в нее ту строку, получает назад курсор с результатами, рисует его в экселе. Когда я представляю, как буду рисовать сам с нуля Tabular Form с помощью PL/SQL и javascript - плакать хочется SvDevОтвет уже был дан: pipelined functionТак вопрос был не "как", а "как еще, кроме написанного в топике". Ну раз обертки - пусть будут обертки. Пойду оберточной бумагой запасаться ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 17:20 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
rockclimberКогда я представляю, как буду рисовать сам с нуля Tabular Form с помощью PL/SQL и javascript Если 11g всё вообще довольно весело: (пример без pipelined) 1. Создается оракловая коллекция, по аналогии того что любят разработчики апекса: штук 100 универсальных полей varchar2 + по необходимости clob; 2. Процедура, которая принимает refcursor, refcursor_name, выполняет его и пишет результат в коллекцию. Тут еще пригодится dbms_sql, который позволяет получить количество и типы столбцов. 3. Вьюшка (что-нибудь типа: create view as select refcursor_name, v1..v100 from table(collection)) 4. instead of триггер на вьюшку, который пишет изменения в базу, в зависимости от refcursor_name (чтобы не писать свою обертку для каждой процедуры) 5. Tabular Form на вьюшку 6. Before Header процесс, с вызовом процедуры из п.2. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 18:06 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
Добавлю, если количество столбцов заранее неизвестно и нужен tabular form: 7. во всех столбцах добавить условие: номер столбца < количество столбцов в курсоре, сохраненное где-нибудь на этапе 2. 8. Имена колонок делаем тип PL/SQL, вычисляем (dbms_sql) потом всю эту можно копировать вместе со страницей, зато без DDL ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 18:32 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
SvDevДобавлю, если количество столбцов заранее неизвестно и нужен tabular form: 7. во всех столбцах добавить условие: номер столбца < количество столбцов в курсоре, сохраненное где-нибудь на этапе 2. 8. Имена колонок делаем тип PL/SQL, вычисляем (dbms_sql) потом всю эту можно копировать вместе со страницей, зато без DDL У нас нет задачи сделать всенепременно на апексе. Просто у начальства есть пожелание перенести на веб-странички то, что делается в экселе и PL/SQL Developer'е. Мне проще сказать что апекс "не взлетит" (тем более при таких требованиях он и правда может не взлететь), а начальство пусть само думает, на чем делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2012, 19:15 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
ИМХО, вы боитесь не того, чего нужно бояться. Ничего плачевного в самодельном табуляре нет. Но если стоит задача всё сделать сверхмалой кровью - то APEX, пожалуй, не лучший вариант в свете SYS_REFCURSOR. И вообще веб в целом. Зачем вам вообще веб-странички? Хотите уйти от Excel? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.01.2013, 14:26 |
|
p_cursor out sys_refcursor - прикрутить в APEX малой кровью
|
|||
---|---|---|---|
#18+
Если использовать функцию вместо (или вокруг) процедуры, а количество столбцов в результирующем курсоре фиксировано, то можно завернуть в XMLTABLE, это проще всего. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.01.2013, 02:55 |
|
|
start [/forum/topic.php?fid=50&fpage=54&tid=1875879]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
others: | 326ms |
total: | 461ms |
0 / 0 |