|
|
|
Junior Member
      
участник
Last Login: 27.06.2006 15:51
Сообщ.: 14,
Visits: 149
|
|
Привет всем!
Заказчики дали БД по сбору отчетов с филиалов. Она, мягко скажем, спроектирована нестандартно. Посему имена таблиц и колонок для выбора в селекте тоже хранятся в определенных таблицах и селект должен собираться динамически что и делается на java. Хотелось бы все это перенести в Oracle. Что я имею в виду? Вот пример:
repforms (repform_tablename, repform_name) иаблица для названий форм: имя таблицы БД, имя формы;
repcols (repform_tablename, repcol_fieldname, repcol_name) таблица названий столбцов: имя таблицы БД (внешн. ключ к repforms), имя поля для select, имя колонки соответствено;
необходима хранимая процедура, где я подаю на вход значение table_name из repforms И она генерирует запрос и выдает данные согласно repcols:
select , , ... from
Вообще-то, еще лучше будет, если будут возвращены всего два поля:
,;
,;
,;
Как мне организовать такую процедуру?
Спасибо.
|
|
|
|
|
Supreme Being
      
участник
Last Login: 17.10.2006 7:27
Сообщ.: 113,
Visits: 1 241
|
|
| спроси на asktom.oracle.com
|
|
|
|
|
Junior Member
      
участник
Last Login: 27.06.2006 15:51
Сообщ.: 14,
Visits: 149
|
|
[quote="Karbofos"]спроси на asktom.oracle.com[/quote]
Хотел спросить, вот какой информативный ответ там дают:
Sorry I have a large backlog right now, please ask a question later...
:(
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.05.2006 8:46
Сообщ.: 244,
Visits: 2 687
|
|
>Как мне организовать такую процедуру?
Динамический SQL - т.е. формируешь строку запроса динамически и выполняешь ее EXECUTE IMMEDIATE. Организовать нетрудно, но для Оракла это не есть хорошо - постоянный разбор запроса.
|
|
|
|
|
Junior Member
      
участник
Last Login: 27.06.2006 15:51
Сообщ.: 14,
Visits: 149
|
|
[quote="TSergey"]>Как мне организовать такую процедуру?
Динамический SQL - т.е. формируешь строку запроса динамически и выполняешь ее EXECUTE IMMEDIATE. Организовать нетрудно, но для Оракла это не есть хорошо - постоянный разбор запроса.[/quote]
Команда EXECUTE IMMEDIATE вероятно бесполезна для select ибо все равно требует курсор. В виду этого проще наверно сразу выполнять
open mycorsor for 'select a,b,c from ...'
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.05.2006 8:46
Сообщ.: 244,
Visits: 2 687
|
|
В виду этого проще наверно сразу выполнять open mycorsor for 'select a,b,c from ...'
Если тебе заранее известны имена полей "a,b,c", то о чем вопрос вообще? Не понял я тебя.
|
|
|
|
|
Junior Member
      
участник
Last Login: 27.06.2006 15:51
Сообщ.: 14,
Visits: 149
|
|
| [quote="TSergey"] В виду этого проще наверно сразу выполнять open mycorsor for 'select a,b,c from ...'
Если тебе заранее известны имена полей "a,b,c", то о чем вопрос вообще? Не понял я тебя.[/quote]
Я не так написал, надоы было так
select a,b,c,.... from ...
|
|
|
|
|
Supreme Being
      
участник
Last Login: 06.05.2006 8:46
Сообщ.: 244,
Visits: 2 687
|
|
Я не так написал, надоы было так
select a,b,c,.... from ...
Ну дык a,b,c - это что? Имена полей? Ты же писал, что
Посему имена таблиц и колонок для выбора в селекте тоже хранятся в определенных таблицах и селект должен собираться динамически
Значит имена полей и их количество заранее неизвестны, и определяются по неким другим определенным таблицам - я так понял. Т.е. ты сначала надо выбрать имена таблиц, потом по ним имена полей и потом "склеить" их в запрос. Так? И при чем тут тогда курсоры какие то? Вложенными циклами выдираешь нужное и формируешь строку запроса. После выполняешь ее EXECUTE IMMEDIATE.
Или я запутался совсем?
|
|
|
|
|
|
| | |