sql - 从 Oracle 查询中编码 XML 中的字符串

标签 sql xml oracle utf-8 plsql

我直接从 Oracle 中的 PL/SQL 生成 XML。

关于特殊字符和字符编码,确保输出字符串符合 XML 的首选方法是什么?

大部分XML文件是静态的,我们只需要输出少数字段的数据。

我认为不好的做法示例:

DECLARE @s AS NVARCHAR(100)
SELECT  @s = 'Test chars = (<>, æøåÆØÅ)'

SELECT  '<?xml version="1.0" encoding="UTF-8"?>'
      + '<root><foo>'
      + @s
      + '</foo></root>' AS XML

最佳答案

我发现了两种生成 XML 的好方法。一个是 SYS.XMLDOM 包,它本质上是 Java DOM API 的包装器。它有点笨拙,因为 pl/sql 不具备 Java 的多态功能,因此您必须经常将元素显式“转换”为节点,反之亦然才能使用包中的方法。

最酷的 IMO 技术是使用 XMLElement 等,SQL 函数如下:

SET SERVEROUTPUT ON SIZE 1000000;
DECLARE

    v_xml XMLTYPE;

BEGIN

    SELECT
        XMLElement( "dual",
            XMLAttributes( dual.dummy AS "dummy" )
        )
    INTO
        v_xml
    FROM
        dual;

    dbms_output.put_line( v_xml.getStringVal() );

END;
/

如果您的 XML 结构不是很复杂并且很容易映射到您的表结构,那么这会非常方便。

关于sql - 从 Oracle 查询中编码 XML 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1637465/

相关文章:

sql - 根据年份是否(完全)包含在日期范围内进行匹配

sql - ORA-01843 : not a valid month exception when running as report on maximo

android - Android 运行时中的水平和垂直 ScrollView

xml - 在复杂类型中嵌套简单类型

sql - 甲骨文按发行分组

mysql - 如何避免sql命令中的重复数据

java - JAX-B 正在编码一切

sql - SSIS 包从 Windows 运行,但从 SQL 代理作业运行时失败

mysql - 如何计算 group by 子句中的多列和一列中的多个不同值

sql - 从一个表中选择并插入到另外两个表中