Oracle SQL。如何显示执行立即声明的结果

时间:2014-02-12 13:25:18

标签: sql oracle oracle11g plsqldeveloper

我有一个动态选择脚本,我使用pl / slq构建,我需要在简单的SQL中执行它。

我该怎么做?

P.S。:我不能使用视图,因为返回表中的collumn数量每次都会改变。

2 个答案:

答案 0 :(得分:1)

如果XML适合您,那么您可以使用DBMS_XMLGEN

可能是这样的:

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

Here is a sqlfiddle demo

答案 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>                                   
相关问题