我有一个动态选择脚本,我使用pl / slq构建,我需要在简单的SQL中执行它。
我该怎么做?
P.S。:我不能使用视图,因为返回表中的collumn数量每次都会改变。
答案 0 :(得分:1)
如果XML适合您,那么您可以使用DBMS_XMLGEN
可能是这样的:
select dbms_xmlgen.getxmltype('here comes your dynamic sql string').getstringval()
from dual;
答案 1 :(得分:1)
如果您事先不知道列集,则会使事情变得复杂。你可以使用XMLSequence + ref cursor这样的东西,但是这又返回了你需要以某种方式处理的XML结构输出。
SQL> create or replace function get_rows
2 (tab_name varchar2)
3 return sys_refcursor
4 is
5 c sys_refcursor;
6 begin
7 open c for 'select * from ' ||tab_name;
8 return c;
9 end;
10 /
SQL> select * from table(xmlsequence(get_rows('dual')));
COLUMN_VALUE
--------------------------------------------------------------------------------
<ROW>
<DUMMY>X</DUMMY>
</ROW>
SQL> select * from table(xmlsequence(get_rows('T')));
COLUMN_VALUE
--------------------------------------------------------------------------------
<ROW>
<X>1</X>
<Y>A1</Y>
</ROW>
<ROW>
<X>2</X>
<Y>A2</Y>
</ROW>
<ROW>
<X>3</X>
<Y>A3</Y>
</ROW>