暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle XMLSERIALIZE动态顺序by语句

askTom 2018-05-07
779

问题描述

嗨,

我有以下问题。

我使用order-by参数调用该函数,但不会使用它。
当我使用order-by硬编码时,将对值进行排序。

您是否知道函数或调用中有什么问题?
非常感谢,
玛丽


function call:
select VL_或者D_XML2('或者DID DESC') FROM DUAL;

或者
select VL_或者D_XML2(null) FROM DUAL;


function:
create or replace FUNCTION VL_或者D_XML2 (
      或者DER_BY_IN VARCHAR2
)
      
RETURN clob IS
ret_val clob;

BEGIN
  DECLARE 
  或者DER_STATEMENT VARCHAR2(1000);
  V_SQL VARCHAR2(3000);
  
  BEGIN
  IF 或者DER_BY_IN IS NULL 或者 或者DER_BY_IN = '' THEN
    或者DER_STATEMENT := ' 或者DID DESC';
  ELSE  
    或者DER_STATEMENT := 或者DER_BY_IN;
  END IF;
  
  SELECT 
  'BEGIN SELECT XMLSERIALIZE(CONTENT XMLROOT(
          XMLELEMENT("TEST", XMLAGG(
            XMLELEMENT("TEST_ELEMENT", 
              XMLF或者EST(  o.或者DID, 
                          o.PATIENT_FIRSTNAME, 
                          o.PATIENT_SURNAME)))), VERSION ''1.0'', STANDALONE YES)) 
                          INTO :ret_val FROM (SELECT * FROM OE或者D WHERE SRCHPATTERN LIKE ''%MARKUS%'' AND SRCHPATTERN LIKE ''%FISCHER%'' 或者DER BY :或者DER_STATEMENT) o;END;' INTO V_SQL FROM DUAL;
   
    EXECUTE IMMEDIATE V_SQL using OUT ret_val, IN 或者DER_STATEMENT;
                  
    return ret_val;
END;
END;




专家解答

当您按绑定变量排序时,您正在按其值排序。不是你通过的那一栏的名字!

例如,如果您有:

open cur for 'select * from t order by :val' using 'y'


那么得到的查询是:

select * from t order by 'y'


注意 “y” 周围的引号!所以行以 “错误” 的顺序出现:

create table t as 
  select level x, 11-level y from dual
  connect by level <= 10;
  
var cur refcursor;

begin
  open :cur for
    'select * from t order by :val' using 'y';
end;
/

print :cur

         X          Y
---------- ----------
         1         10
         2          9
         3          8
         4          7
         5          6
         6          5
         7          4
         8          3
         9          2
        10          1


有关如何传递列以执行动态order by的示例,请参见:

https://asktom.oracle.com/pls/apex/asktom.search?tag=order-by-at-runtime#9537893900346381974
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论