Запросы с динамически формируемыми колонками
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Запросы с динамически формируемыми колонками Expand / Collapse
Автор
Сообщение
02.04.2006 10:37
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior 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


Вообще-то, еще лучше будет, если будут возвращены всего два поля:
,;
,;
,;


Как мне организовать такую процедуру?

Спасибо.


Сообщ. #894346
02.04.2006 11:51
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 17.10.2006 7:27
Сообщ.: 113, Visits: 1 241
спроси на asktom.oracle.com
Сообщ. #894348
02.04.2006 13:34
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior 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...

:(
Сообщ. #894349
03.04.2006 9:06
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.05.2006 8:46
Сообщ.: 244, Visits: 2 687
>Как мне организовать такую процедуру?
Динамический SQL - т.е. формируешь строку запроса динамически и выполняешь ее EXECUTE IMMEDIATE. Организовать нетрудно, но для Оракла это не есть хорошо - постоянный разбор запроса.
Сообщ. #894357
03.04.2006 11:31
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior 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 ...'
Сообщ. #894369
03.04.2006 16:15
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.05.2006 8:46
Сообщ.: 244, Visits: 2 687
В виду этого проще наверно сразу выполнять open mycorsor for 'select a,b,c from ...'

Если тебе заранее известны имена полей "a,b,c", то о чем вопрос вообще? Не понял я тебя.
Сообщ. #894411
04.04.2006 10:47
Junior Member

Junior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior MemberJunior 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 ...

Сообщ. #894462
04.04.2006 14:48
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 06.05.2006 8:46
Сообщ.: 244, Visits: 2 687
Я не так написал, надоы было так
select a,b,c,.... from ...

Ну дык a,b,c - это что? Имена полей? Ты же писал, что
Посему имена таблиц и колонок для выбора в селекте тоже хранятся в определенных таблицах и селект должен собираться динамически

Значит имена полей и их количество заранее неизвестны, и определяются по неким другим определенным таблицам - я так понял. Т.е. ты сначала надо выбрать имена таблиц, потом по ним имена полей и потом "склеить" их в запрос. Так? И при чем тут тогда курсоры какие то? Вложенными циклами выдираешь нужное и формируешь строку запроса. После выполняешь ее EXECUTE IMMEDIATE.
Или я запутался совсем?
Сообщ. #894490
04.04.2006 15:09
Junior Member

Junior MemberJunior Member