如何在 Oracle 中生成 xml 空值?

Posted

技术标签:

【中文标题】如何在 Oracle 中生成 xml 空值?【英文标题】:How to generate xml null values in Oracle? 【发布时间】:2016-11-14 13:27:24 【问题描述】:

我是通过plsql 生成XML 的新手。如何使用null 值生成XML? 我需要下面的输出。

DealUserDescription i:nil="true"/

【问题讨论】:

【参考方案1】:

创建 nil xml 元素的功能,我相信它可以改进:

create function add_xml_element(
  p_name in varchar2,
  p_value in varchar2,
  p_namespaces in varchar2 default null,
  p_nil_prefix in varchar2 default null,
  p_nil_namespace in varchar2 default null) return XMLType is

  l_result XMLType;
begin
  if p_value is not null then
    l_result := XMLType('<' || p_name || ' ' || p_namespaces || '>'||p_value||'</' || p_name || '>');
  elsif p_nil_prefix is not null and p_nil_namespace is not null then
    l_result := XMLType('<' || p_name || ' ' || p_namespaces || ' ' || p_nil_namespace || ' ' || p_nil_prefix || ':nil="true"/>');
  else
    raise_application_error(-20001, 'Nil prefix or namespace not provided');
  end if;

  return l_result;
end;

和 plsql 脚本来测试它:

declare
  l_xml xmlType;

  cursor c_build_xml(cp_value in varchar2) is
    select
      xmlElement("root",
        add_xml_element(
          'node',
          cp_value,
          null,
          'i',
          'xmlns:i="default"'))
    from
      dual;
begin
  open c_build_xml('nodevalue');
  fetch c_build_xml
    into l_xml;
  close c_build_xml;

  dbms_output.put_line(l_xml.getClobVal());

  open c_build_xml(null);
  fetch c_build_xml
    into l_xml;
  close c_build_xml;

  dbms_output.put_line(l_xml.getClobVal());
end;
/

脚本输出如下:

<root>
  <node>nodevalue</node>
</root>

<root>
  <node xmlns:i="default" i:nil="true"/>
</root>

【讨论】:

以上是关于如何在 Oracle 中生成 xml 空值?的主要内容,如果未能解决你的问题,请参考以下文章

如何从数据库表中生成xml文件?

如何使用现有的Oracle序列在hibernate中生成id?

如何在xml中生成schema约束

如何查看查询转换器在 Oracle 中生成的查询

如何在 Scala 中生成格式良好的 XML?

如何在 Oracle SQL Developer 中生成带有子查询的 INSERT 语句?