我有两个结果集的情况,我需要将它们合并为一个结果集。 多次尝试各种查询以获取所需的输出却很累,但失败了。
这些是结果集。
select drc.rc_column_name from dyna_report_columns drc;
select * from REPORT1;
我想做的是将rc_column_name
的结果作为一行插入到下一个结果集。
答案 0 :(得分:2)
我正在计划动态化报告”
您想要一个可以处理任意数量列的解决方案。因此,您不能通过常规查询来执行此操作。您需要使用动态SQL即时组装投影。
这意味着执行动态SQL语句并返回弱引用游标的存储过程或函数。同样,它必须是ref游标,因为那是唯一可以处理可变投影的构造。引用游标与JDBC ResultSet和ODBC ResultSet兼容,并且与大多数常见的前端编程语言等效。
这是一个使用您发布的表的函数:
create or replace function get_any_report return sys_refcursor
is
stmt varchar2(32767);
rc sys_refcursor;
begin
select 'select 1 as row_type, ' ||
listagg(''''||rc_column_name||''' as col'||trim(to_char(rc_seq)), ',') within group (order by rc_seq)
||' from dual'
||' union all
select 2 as row_type, r1.*
from report1 r1
order by 1, 2'
into stmt
from dyna_report_columns ;
dbms_output.put_line(stmt);
open rc for stmt;
return rc;
end;
/
在ORDER BY子句中引用了另外一列row_type
,以确保标题行是结果集的第一行。
这里是an Oracle LiveSQL Demo。抱歉,您需要一个免费的Oracle帐户来运行此帐户,但是SQL Fiddle目前有点不稳定。
这里是a SQL Fiddle version of the demo,但是Fiddle不支持DBMS_OUTPUT。