我想使用oracleXMLFOREST
函数。(定义链接)
语法示例:
XMLFOREST( [value expression AS alias], [...])
我的问题是,如果值表达式为NULL,则不会为该值表达式创建任何元素。
如何执行它以添加一个空的XML片段?
您可以使用XMLFOREST
:
如果value_expr为null,则不会为该value_expr创建任何元素。
也没有类似的XMLCOLATTVAL
功能:
您必须为value_expr指定一个值。如果value_expr为null,则不返回任何元素。
XMLELEMENT
另一方面,按要求返回一个空元素:
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>
...
为了完整起见,还可以使用另外两个Oracle工具(受OTN论坛上的这篇文章启发)。首先,您可以使用XMLQUERY
(在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>...
您还可以使用该DBMS_XMLGEN
软件包:
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>
我使用此函数运行SQL查询: 但是我得到了这个错误 2017-08-05 18:54:18,421 INFOsqlalchemy.engine.base.Engine(4L,)2017-08-05 18:54:18,424 INFOsqlalchemy.engine.base.Engine COMMIT127.0.0.1--[05/Aug/2017 18:54:18]"GET/HTTP/1.1"2
问题内容: 最近我遇到了一个问题:赋值运算符链理解。 在回答这个问题,我开始怀疑我自己的加法赋值运算符的行为的理解或任何其他(,,等)。 我的问题是,下面的表达式中的变量何时更新到位,以便其更改的值在求值过程中反映在表达式的其他位置,其背后的逻辑是什么?请看以下两个表达式: 表达式1 表达式2 在第一个表达式中,当计算最里面的表达式时,似乎不更新的值,因此结果是而不是。 但是,在第二个表达式中,的
最近我遇到了这样一个问题:作业操作员链理解。 在回答这个问题时,我开始怀疑自己对加法赋值运算符或任何其他(
问题内容: 我有一张约有50万行的表格;varchar(255)UTF8列包含一个文件名; 我正在尝试从文件名中删除各种奇怪的字符-以为我会使用字符类: 现在, MySQL中是否有一个函数可以让您通过正则表达式进行替换 ?我正在寻找与REPLACE()函数类似的功能-简化示例如下: 我知道REGEXP / RLIKE,但那些只检查 是否 有匹配,没有 什么 比赛是。 (我 可以 做一个“ ”从PH
问题内容: 在此表模式中: 我有一个父母,假设这张桌子: 父母是名为“ singapore”* 的 国家 对象。可以有多个嵌套的对象,是孩子们 盛港 随便怎么样都 盛港 是孩子 新加坡 。 *** 因此,一条等级链可能看起来像a-> b->盛港->新加坡 ->意思 是 如何获得所有以父级为新加坡的位置对象,包括父级对象(新加坡)?(请在SQLAlchemy中)。谢谢! 问题答案: SA文档:Que
问题内容: Java中的东西 现在它应该像这样转换成kotlin 但这是不正确的。 这是我得到的错误: 实际上,上面的代码只是一个说明问题的示例。这是我的原始代码: 问题答案: 正如@AndroidEx正确指出的那样,与Java不同,分配不是Kotlin中的表达式。原因是通常不建议带有副作用的表达。见这个讨论上类似的话题。 一种解决方案是拆分表达式并将赋值移出条件块: 另一个是使用stdlib中的