1
我有一个动态的选择脚本,我用pl/slq构建,我需要在简单的SQL中执行它。Oracle SQL。如何显示执行立即语句的结果
我该怎么做?
P.S .:我无法使用视图,因为每次返回的表中的列数都会发生变化。
我有一个动态的选择脚本,我用pl/slq构建,我需要在简单的SQL中执行它。Oracle SQL。如何显示执行立即语句的结果
我该怎么做?
P.S .:我无法使用视图,因为每次返回的表中的列数都会发生变化。
IF XML套房你很好,那么你可以使用DBMS_XMLGEN
可能是这样的:
select dbms_xmlgen.getxmltype('here comes your dynamic sql string').getstringval()
from dual;
如果你不知道列预先设定,这使得事情复杂。你可以使用诸如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>
一个不能使用这些解决方案,导致我需要得到的结果,而不使用PL/SQL。我可以在程序和函数中存储一些功能,但我需要使用简单的SELECT语句获得结果 – dududko
然后使用refcursor。看到这里 - http://stackoverflow.com/questions/6457085/ref-cursor-with-execute-immediate – OldProgrammer