从 Oracle 函数返回一个完全动态的表

Mic*_*l-O 8 oracle oracle-11g-r2 plsql

我想编写一个带有两个IN参数的函数,其中第一个是 a varchar,第二个是varchars. 基于这些,我想返回一个具有不同列数量和类型名称的表varchar

据我所知,我必须始终创建一个对象/记录和它的表类型。这意味着我的想法行不通?基本目标是将系统命令输出作为表传递回被调用者。

编辑:更多关于任务。我想发出一个操作系统命令,使用输出并将其作为表返回。OS 命令的输出将是 CSV 格式的数据。在执行时,我不知道要返回的行数,而只知道作为第二个参数传递的列数。我正在考虑使用带有动态STRUCTARRAY包含它们的Java 。虽然我更喜欢前一种方法。

它应该是这样的:

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
Run Code Online (Sandbox Code Playgroud)

小智 -1

一种解决方案是根据 Lucene 输出创建一个外部表。您可以轻松更改外部表定义(并将其指向多个文件)。

所以你将拥有:

function l_query(clob query, list of varchars cols) returns table_name
begin 
execute system command(query, cols); 
#hopefully we know the output filename
create a new external table mapping the output;
end
Run Code Online (Sandbox Code Playgroud)