【问题标题】:Oracle SQL. How to display result of execute immediate statement [duplicate]甲骨文 SQL。如何显示执行立即语句的结果[重复]
【发布时间】:2014-02-12 13:25:17
【问题描述】:

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

我该怎么做?

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

【问题讨论】:

  • A 不能使用这些解决方案,因为我需要在不使用 PL/SQL 的情况下获得结果。我可以在过程和函数中存储一些功能,但我需要使用简单的 SELECT 语句来获取结果
  • 然后使用 refcursor。见这里 - stackoverflow.com/questions/6457085/…

标签: sql oracle oracle11g plsqldeveloper


【解决方案1】:

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

可能是这样的:

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

Here is a sqlfiddle demo

【讨论】:

    【解决方案2】:

    如果您事先不知道列设置,这会使事情变得复杂。您可以使用 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>                                   
    

    【讨论】:

      猜你喜欢
      • 2021-04-16
      • 2019-06-23
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多