CASE WHEN THEN創建 XML 時,我無法申請。
也許我應該使用IF ELSE,但我正在創建一個常規查詢。
我應該有一個條件:
CASE WHEN 1 2=true
THEN attribute "A"
ELSE attribute "B"
END
例子:
SELECT XMLROOT(
XMLELEMENT("attrib",
CASE
WHEN (1 2) = 3 THEN
(XMLATTRIBUTES('a' as "A"))
ELSE
(XMLATTRIBUTES('b' as "B"))
END))
FROM dual
uj5u.com熱心網友回復:
從XMLELEMENT檔案中:
構成元素內容的物件跟在
XMLATTRIBUTES關鍵字后面。在 中XML_attributes_clause,如果value_expr為 null,則不會為該值運算式創建任何屬性。
您想將CASE運算式放入XMLATTRIBUTES其中并為每個屬性設定一個:
select XMLROOT(
XMLELEMENT("attrib",
XMLATTRIBUTES(
CASE WHEN 1 2 = 3 THEN 'a' END AS "A",
CASE WHEN 1 2 <> 3 THEN 'b' END AS "B"
)
),
VERSION '1.0'
) AS xml
FROM DUAL;
注意:您還VERSION需要XMLROOT.
哪個輸出:
XML <?xml version="1.0"?>
<attrib A="a"/>
db<>在這里擺弄
uj5u.com熱心網友回復:
因為
- 運算式在錯誤的
CASE..WHEN位置宣告 XMLROOT函式缺少引數- 單引號應包含識別符號(a,A,b,B)而不是雙引號缺少“A”和“B”
EVALNAME之前的關鍵字
考慮到這些事實,您可以重新排列現有陳述如下;
SELECT XMLROOT(CASE
WHEN 1 2 = 3 THEN
XMLELEMENT("attrib", XMLATTRIBUTES('a' AS EVALNAME 'A'))
ELSE
XMLELEMENT("attrib", XMLATTRIBUTES('b' AS EVALNAME 'B'))
END,
VERSION '1.0',
STANDALONE YES)
FROM dual;
但是 XMLROOT已棄用,XMLSERIALIZEOracle 推薦使用函式而不是那樣。因此,請使用以下內容替代您的情況
SELECT XMLType(CASE
WHEN 1 2 = 3 THEN
XMLSERIALIZE(
CONTENT XMLELEMENT("attrib", XMLATTRIBUTES('a' AS EVALNAME 'A'))
VERSION '1.0'
)
ELSE
XMLSERIALIZE(
CONTENT XMLELEMENT("attrib", XMLATTRIBUTES('b' AS EVALNAME 'B'))
VERSION '1.0'
)
END).getStringVal()
FROM dual;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/426887.html
上一篇:oracle中的多個字串搜索
