Вы, похоже, просите кусок кода PL / SQL, который будет принимать произвольный запрос, возвращающий набор результатов с неопределенной структурой, и 'forward / restructure', который каким-то образом набор результатов будет таким, который может быть легко воспроизведен некоторыми " пользовательский инструмент GUI ".
Если это так, посмотрите на DBMS_SQL для динамического SQL. Он имеет процедуру DESCRIBE_COLUMNS, которая возвращает столбцы из динамического оператора SELECT. Шаги, которые вам понадобятся:
- Разбор заявления
- Опишите набор результатов (имена столбцов и типы данных)
- Извлекает каждую строку и для каждого столбца вызывает зависимую от типа данных функцию, чтобы вернуть это значение в локальную переменную
- Поместите эти локальные переменные в определенную структуру для возврата в вызывающую среду (например, непротиворечивые имена столбцов [такие как col_1, col_2], вероятно, все из VARCHAR2)
В качестве альтернативы вы можете попробовать встроить запрос в оператор XMLFOREST и проанализировать результаты из XML.
Добавлено:
В отличие от SQL Server, вызов Oracle PL / SQL не будет «естественно» возвращать один набор результатов. Он может открыть один или несколько курсоров ref и передать их обратно клиенту. Затем клиент несет ответственность за выборку записей и столбцов из этих ссылок. Если ваш клиент не / не может справиться с этим, то вы не можете использовать вызов PL / SQL.
Хранимая функция может возвращать предварительно определенный тип коллекции, что позволяет вам делать что-то вроде «select * from table (func_name ('select * from country')))». Однако функция не может выполнять DML (обновление / удаление / вставка / слияние), потому что она уничтожает любые концепции согласованности для этого запроса. Плюс возвращаемая структура фиксируется так, что
select * from table(func_name('select * from countries'))
должен возвращать тот же набор столбцов (имена столбцов и типы данных), что и
select * from table(func_name('select * from persons'))
Возможно, используя DBMS_SQL или XMLFOREST, для такой функции взять динамический запрос и реструктурировать его в предварительно определенный набор столбцов (col_1, col_2 и т. Д.), Чтобы его можно было возвращать согласованным образом. Но я не понимаю, какой в этом смысл.