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

在指定位置将xmltype插入xmltype [PL / SQL]

逄嘉木
2023-03-14
问题内容

我在pl / sql中的指定位置将xmltype插入另一个xmltype时遇到问题。

第一个变量v_xml的格式为:

<ord>
  <head>
    <ord_code>123</ord_code>
    <ord_date>01-01-2015</ord_date>
  </head>
</ord>

第二个v_xml2:

<pos>
  <pos_code>456</pos_code>
  <pos_desc>description</pos_desc>
</pos>

我的目的是得到这样的东西:

<ord>
  <head>
    <ord_code>123</ord_code>
    <ord_date>01-01-2015</ord_date>
  </head>
  <!-- put the second variable in this place - after closing <head> tag -->
  <pos>
    <pos_code>456</pos_code>
    <pos_desc>description</pos_desc>
  </pos>
</ord>

我应该如何处理我的代码?

declare
  v_xml  xmltype;
  v_xml2 xmltype;
begin
  -- some code
  -- some code
  -- v_xml and v_xml2 has the form as I define above
end;

有人能帮助我解决这个问题吗?据我所知,有诸如insertchildxml,appendchildxml之类的功能或类似的功能……我在纯SQL中找不到很少的解决方案,但是我不知道如何在PL
/ SQL中移动它。

谢谢!


问题答案:

您可以使用提到的appendChildXML,如下所示:

declare
  v_xml  xmltype := xmltype('<ord>
                               <head>
                                 <ord_code>123</ord_code>
                                 <ord_date>01-01-2015</ord_date>
                               </head>
                             </ord>');
  v_xml2 xmltype:= xmltype('<pos>
                              <pos_code>456</pos_code>
                              <pos_desc>description</pos_desc>
                            </pos>');
  v_output xmltype;
begin
  select appendChildXML(v_xml, 'ord', v_xml2) 
    into v_output from dual;

  -- output result
  dbms_output.put_line( substr( v_output.getclobval(), 1, 1000 ) );
end;

输出:

<ord>
  <head>
    <ord_code>123</ord_code>
    <ord_date>01-01-2015</ord_date>
  </head>
  <pos>
    <pos_code>456</pos_code>
    <pos_desc>description</pos_desc>
  </pos>
</ord>


 类似资料:
  • 采用这种方法: 我不会写: 因为它似乎依赖于访问器方法被命名为。是否可以使用代替?

  • 问题内容: 我们有一个有一些特殊要求的项目,其中之一是从Oracle 10g数据库的XMLType数据库列中获取数据。 我们已经找到了使用JDBC的简单解决方案,但是由于所有数据访问都是通过JPA(使用的实现是EclipseLink)来完成,因此它会使应用程序有些混乱。 我们已经进行了一些研究,找到了一些解决方案,例如使用Converters和其他辅助类型,但是实现似乎有些复杂。 因此,我的问题是

  • 问题内容: 有没有可以做到这一点的PHP函数? 我用来获取子字符串的位置,我想在该位置之后插入一个。 问题答案: $newstr = substr_replace($oldstr, $str_to_insert, $pos, 0);

  • 我得到这个错误'ORA-01704:字符串文字太长',而我试图插入数据从SQL表在Oracle表。在我的Oracle表中,我有一个XMLTYPE列类型的列。当我创建表时,我指定了这样的XML列: 除此列之外,在它之前还有其他23列,当我从insert语句XML列中排除时,insert正在传递。XML列包含表中所有其他23列的XML格式数据。我是否应该在XML列中为长度或其他内容添加一些附加规范?

  • 问题内容: 我想在XML文档上有一条select语句,并且一栏应该返回我 每个节点 的 路径 。 例如,给定数据 导致 我想要这样的结果: 我看不到如何做到这一点。我认为必须正确地进行两件事: 我可以提取从单个操作或方法,或做我有串魔术做到这一点? 什么是正确的XPath表达式,这样我就可以获取整个元素路径 (如果可以的话),例如。侵略? 也许我还没有完全理解。可能是我需要一种不同的方法,但我看不

  • 问题内容: Oracle文档声称它将XMLType存储为BINARY XML比存储CLOB更紧凑。但是,如何找出二进制xml占用了多少空间? 因此,似乎是某种指针或LOB定位器的大小,并将二进制XML解压缩为文本。但是二进制XML本身的存储大小如何? 请帮助,表大小为340GB,因此值得研究存储选项… 问题答案: Oracle二进制XML格式对应于缩写为CSX的“紧凑型模式感知XML格式”。编码数