Я хотел бы написать функцию с двумя IN
параметрами, где первый - varchar
это список, а второй - список varchars
. Исходя из этого, я хочу вернуть таблицу с различными значениями столбцов и именами типов varchar
.
Насколько я видел, я всегда должен создавать объект / запись и тип таблицы. Это значит, что моя идея не сработает? Основная цель - передать выходные данные системной команды вызываемой стороне в виде таблицы.
Изменить: больше на задаче. Я хочу выполнить команду ОС, использовать вывод и вернуть его обратно в виде таблицы. Вывод команды ОС будет представлять собой данные в формате CSV. Во время выполнения я не знаю количество строк, которые должны быть возвращены, а только количество столбцов, которое передается как второй аргумент. Я думал об использовании Java с динамическими STRUCT
и ARRAY
содержащими их. Хотя я бы предпочел первый подход.
Это должно выглядеть так:
create function(clob query, list of varchars cols) returns table
begin
execute system command(query, cols);
examine sysout from command;
return tabular data from syscmd as table;
end
источник
Ответы:
Можно, хотя и довольно сложно, написать конвейерную табличную функцию, которая возвращает переменную структуру . Ваша конвейерная табличная функция может принимать два аргумента и использовать интерфейс Oracle Data Cartridge и магию типа AnyDataSet для возврата динамической структуры во время выполнения. Затем вы можете использовать это в последующих операторах SQL, как если бы это была таблица, т.е.
Еще пара ссылок, которые обсуждают тот же пример реализации
источник
Я думаю, что ваш лучший подход - отказаться от попытки отправить динамическую таблицу обратно (хотя я полагаю, что вы могли бы создать временную таблицу и вернуть к ней рекурсор, но я здесь не уверен).
Мой предпочтительный подход заключается в том, чтобы генерировать результаты в более гибком формате, что-то вроде XML-документа или тому подобное, и возвращать его. Это дает вам необходимую гибкость без необходимости определять столбцы после сканирования функции.
источник
Вы можете создать представление tmp и динамически заменить его.
Результаты исполнения:
источник
Одним из решений было бы создание внешней таблицы на основе результатов Lucene. Вы можете легко изменить определение внешней таблицы (и указать его на несколько файлов).
Итак, вы будете иметь:
источник