2014-02-12 64 views
1

我有一个动态的选择脚本,我用pl/slq构建,我需要在简单的SQL中执行它。Oracle SQL。如何显示执行立即语句的结果

我该怎么做?

P.S .:我无法使用视图,因为每次返回的表中的列数都会发生变化。

+0

一个不能使用这些解决方案,导致我需要得到的结果,而不使用PL/SQL。我可以在程序和函数中存储一些功能,但我需要使用简单的SELECT语句获得结果 – dududko

+0

然后使用refcursor。看到这里 - http://stackoverflow.com/questions/6457085/ref-cursor-with-execute-immediate – OldProgrammer

回答

1

IF XML套房你很好,那么你可以使用DBMS_XMLGEN

可能是这样的:

select dbms_xmlgen.getxmltype('here comes your dynamic sql string').getstringval() 
from dual; 

Here is a sqlfiddle demo

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>