当前位置: 首页 > 面试题库 >

即使表达式值为null,如何执行xmlforest creat元素?

归松
2023-03-14
问题内容

我想使用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中的