問題描述
我想使用 oracle XMLFOREST
函數.(定義鏈接)
示例語法:
<塊引用>XMLFOREST( [值表達式 AS 別名], [...])
我的問題是,如果值表達式為 NULL,則不會為該值表達式創建任何元素.
如何強制它添加一個空的 XML 片段?
您可以使用 XMLFOREST
:
如果 value_expr 為空,則不會為該 value_expr 創建任何元素.
也不是類似的XMLCOLATTVAL
功能:
您必須為 value_expr 指定一個值.如果 value_expr 為 null,則不返回任何元素.
XMLELEMENT
另一方面,根據請求返回一個空元素:
SQL>選擇 xmlelement("EMP", xmlelement("ENAME", ename),2 xmlelement("工作", 工作),3 xmlelement("MGR", mgr)4 ).getclobval() xml5 來自 scott.emp;XML----------------------------------------------------------------<EMP><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><MGR></MGR></EMP><EMP><ENAME>布萊克</ENAME><JOB>經理</JOB><MGR>7839</MGR></EMP>...
<小時>
為了完整性,還可以使用另外兩個 Oracle 工具(靈感來自 這篇文章在 OTN 論壇上).首先,您可以使用 XMLQUERY
(在 11.2 上?):
SQL>選擇2 xml查詢(3 '(#ora:view_on_null 空#) {4 <EMPS>{5 for $c in fn:collection("oradb:/SCOTT/EMP")/ROW6 返回元素 EMP {7 $c/ENAME8 , $c/JOB9 , $c/MGR10 }11}</EMPS>12 }'13 次傳球(10 次為數字)為mid"14 返回內容15 ).getClobval() 結果16 從雙;結果----------------------------------------------------------------------<EMPS><EMP><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><MGR></MGR></EMP><EMP><ENAME>布萊克</ENAME>...
您也可以使用DBMS_XMLGEN
包:
SQL>宣布2 ctx dbms_xmlgen.ctxHandle;3 sqlstr varchar2(4000)4 := 'SELECT ename, job, mgr FROM scott.emp WHERE ename=''KING''';5 res clob;6 開始7 ctx:= dbms_xmlgen.newContext(sqlstr);8 dbms_xmlgen.setNullHandling(ctx, dbms_xmlgen.EMPTY_TAG);9 res:= dbms_xmlgen.getXML(ctx);10 dbms_xmlgen.closeContext(ctx);11 dbms_output.put_line(res);12 結束;13/<?xml version="1.0"?><行集><行><ENAME>KING</ENAME><職位>總裁</職位><MGR/></ROW></ROWSET>
I would like to use the oracle XMLFOREST
function. (Link for definition)
Example Syntax:
XMLFOREST( [value expression AS alias], [...])
My problem is that if value expression is NULL, then no element is created for that value expression.
How can I enforce it to add an empty XML fragment?
You can' use XMLFOREST
:
If value_expr is null, then no element is created for that value_expr.
Nor the similar XMLCOLATTVAL
function:
You must specify a value for value_expr. If value_expr is null, then no element is returned.
XMLELEMENT
on the other hand returns an empty element as requested:
SQL> select xmlelement("EMP", xmlelement("ENAME", ename),
2 xmlelement("JOB", job),
3 xmlelement("MGR", mgr)
4 ).getclobval() xml
5 from scott.emp;
XML
----------------------------------------------------------------
<EMP><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><MGR></MGR></EMP>
<EMP><ENAME>BLAKE</ENAME><JOB>MANAGER</JOB><MGR>7839</MGR></EMP>
...
For completeness, two more Oracle tools can also be used (inspired by this post on the OTN forums). First you can use an XMLQUERY
(on 11.2? ):
SQL> select
2 xmlquery(
3 '(#ora:view_on_null empty #) {
4 <EMPS> {
5 for $c in fn:collection("oradb:/SCOTT/EMP")/ROW
6 return element EMP {
7 $c/ENAME
8 , $c/JOB
9 , $c/MGR
10 }
11 }</EMPS>
12 }'
13 passing cast(10 as number) as "mid"
14 returning content
15 ).getClobval() as result
16 from dual;
RESULT
----------------------------------------------------------------------
<EMPS>
<EMP><ENAME>KING</ENAME><JOB>PRESIDENT</JOB><MGR></MGR></EMP>
<EMP><ENAME>BLAKE</ENAME>...
You can also use the DBMS_XMLGEN
package:
SQL> DECLARE
2 ctx dbms_xmlgen.ctxHandle;
3 sqlstr varchar2(4000)
4 := 'SELECT ename, job, mgr FROM scott.emp WHERE ename=''KING''';
5 res clob;
6 BEGIN
7 ctx := dbms_xmlgen.newContext(sqlstr);
8 dbms_xmlgen.setNullHandling(ctx, dbms_xmlgen.EMPTY_TAG);
9 res := dbms_xmlgen.getXML(ctx);
10 dbms_xmlgen.closeContext(ctx);
11 dbms_output.put_line(res);
12 END;
13 /
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ENAME>KING</ENAME>
<JOB>PRESIDENT</JOB>
<MGR/>
</ROW>
</ROWSET>
這篇關于即使表達式值為空,如何強制執行 xmlforest creat 元素?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!