Как динамически извлекать данные из таблицы оракула, структура которой известна только во время выполнения, с помощью процедуры pl sql?

Мне было дано требование создать процедуру pl/sql, которая будет принимать оператор select в качестве входного параметра. Все данные должны быть извлечены из запроса и напечатаны в DBMS_OUTPUT.

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

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


person APPSfreak    schedule 13.04.2013    source источник
comment
Поскольку имя таблицы будет предоставлено во время выполнения, я просто хочу знать, как хранить данные, полученные из запроса, потому что я не могу определить переменные или коллекции, поскольку структура таблицы неизвестна.. пожалуйста, помогите..   -  person APPSfreak    schedule 13.04.2013
comment
Одно из представлений xxx_TAB_COLUMNS (xxx in ('USER', 'ALL', 'DBA')) будет вашим другом здесь.   -  person Bob Jarvis - Reinstate Monica    schedule 14.04.2013


Ответы (2)


Во-первых, требование кажется невероятно сомнительным. Вы никогда не должны зависеть от данных, которые записываются в буфер DBMS_OUTPUT — клиент полностью должен включить буфер, убедиться, что буфер достаточно велик, и отобразить данные из буфера для пользователя. По умолчанию ничего из этого не произойдет. А написать процедуру для манипулирования таблицей, структура которой совершенно неизвестна, было бы невероятно необычно.

Однако, если вы действительно полны решимости, вы, вероятно, захотите взять SQL Unloader, который использует DBMS_SQL для записи данных из произвольного запроса в плоский файл и модифицирует его для записи в DBMS_OUTPUT вместо этого.

person Justin Cave    schedule 13.04.2013
comment
На самом деле я должен создать файл данных Excel для извлеченных строк. Я только что упомянул DBMS_OUTPUT для простоты. - person APPSfreak; 13.04.2013
comment
я согласен с @Justin здесь. PL/SQL — это не тот инструмент, который вам нужен. нужно искать способы загрузки запросов в excel. вы можете сделать это, определив источник данных в excel для оракула и загрузки напрямую. поиск источника данных excel в google. - person haki; 14.04.2013
comment
@APPSfreak - Если под проще вы подразумеваете без использования DBMS_SQL, то нет. Если количество и типы столбцов неизвестны, вам нужна гибкость DBMS_SQL. Это делает ваш PL/SQL гораздо более сложным, чем обычно, но это цена, которую вы платите за такой уровень гибкости. Это одна из причин, по которой требование не имеет особого смысла. - person Justin Cave; 14.04.2013

Существует пакет утилит с открытым исходным кодом для создания читаемых файлов Excel в PL/SQL.

https://code.google.com/p/plsql-utils/

Тем не менее, я бы порекомендовал вам рассмотреть возможность использования языка более общего назначения для вашего инструмента, если это вообще возможно. PL/SQL может быть невероятно полезен для логики базы данных, но я ожидаю, что для взаимодействия с внешним миром вы получите более простое в сопровождении решение, используя что-то вроде Python или Java.

Хотя, как всегда YMMV :-)

person Thomas Barker    schedule 14.04.2013