想在 PL/SQL 中连接两个 XML 元素,想连接两个 XMLTYPE 元素

Posted

技术标签:

【中文标题】想在 PL/SQL 中连接两个 XML 元素,想连接两个 XMLTYPE 元素【英文标题】:Want to concat two XML elements in PL/SQL, want to concat two XMLTYPE elements 【发布时间】:2014-09-30 19:41:24 【问题描述】:
declare
var1 XMLTYPE;
var2 XMLTYPE;
var3 XMLTYPE;
var4 XMLTYPE;
Begin
var1 := XMLTYPE('<START>') ;
var2 := XMLTYPE('<DOCUMENT><TITLE>Mr.</TITLE>');
var3 := XMLTYPE('<NAME>Mr.</NAME></DOCUMENT>');
var4 := XMLTYPE('</START>') ;
end;

如何连接上述 XMLTYPE 变量?

谢谢。

【问题讨论】:

我还想知道如何将 varchar2 转换为 XMLTYPE 并将 XMLTYPE 转换为 varchar2 .. 上面的变量会出错,因为 XMLTYPE 变量应该有开始和结束标记并且格式正确。 您不能“连接”XML,因为这样做没有意义。如果AB 是两个格式正确的XML 文档,那么“A || B”本身就不是格式正确的,因为它有两个根元素。为什么您认为需要能够以这种方式连接 XML 文档? 【参考方案1】:

您的示例将无法编译,因为所有字符串都不是有效的 XML 文档。 (你会得到 ORA-31011: XML Parsing Failed)。

您可以将每个片段放在 VARCHAR2 中,然后在 XMLTYPE 函数中连接它们:

declare
    var1 varchar2(32);
    var2 varchar2(32);
    var3 varchar2(32);
    var4 varchar2(32);
    varx xmltype;
Begin
    var1 := '<START>';
    var2 := '<DOCUMENT><TITLE>Mr.</TITLE>';
    var3 := '<NAME>Mr.</NAME></DOCUMENT>';
    var4 := '</START>' ;

    varx := xmltype(var1 || var2 || var3 || var4);

    dbms_output.put_line(varx.getStringVal());    
end;

从最后一行可以看出,方法 'getStringVal()' 将返回 XML 的 varchar2 值。

【讨论】:

以上是关于想在 PL/SQL 中连接两个 XML 元素,想连接两个 XMLTYPE 元素的主要内容,如果未能解决你的问题,请参考以下文章

使用 PL/SQL 使用 forall 语法批量插入

PL/SQl sqldeveloper想在plsql中输出多行

使用 PL SQL 读取 XML 元素的出现

PL/SQL - 将两个结果集缓存到集合中并将它们连接在一起?

如何在 PL/SQL 中连接两个表而不创建新表

使用 PL/SQL 创建 XML