问题描述
嗨,
我有以下问题。
我使用order-by参数调用该函数,但不会使用它。
当我使用order-by硬编码时,将对值进行排序。
您是否知道函数或调用中有什么问题?
非常感谢,
玛丽
function call:
或者
function:
我有以下问题。
我使用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;专家解答
当您按绑定变量排序时,您正在按其值排序。不是你通过的那一栏的名字!
例如,如果您有:
那么得到的查询是:
注意 “y” 周围的引号!所以行以 “错误” 的顺序出现:
有关如何传递列以执行动态order by的示例,请参见:
https://asktom.oracle.com/pls/apex/asktom.search?tag=order-by-at-runtime#9537893900346381974
例如,如果您有:
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




