【问题标题】:Oracle - extracting XML version and encoding from XML prolog in XMLTypeOracle - 从 XMLType 中的 XML prolog 中提取 XML 版本和编码
【发布时间】:2022-01-19 22:49:39
【问题描述】:

假设我们在 Oracle 中有以下 XMLType:

<?xml version="1.0" encoding="UTF-8"?>
<root>
</root>

我需要获取 XML 版本和编码值或整个 XML 序言,最好使用 XML 函数,f。前任。 XML 表。那可能吗?还是仅使用字符串/CLOB 函数?

我们使用 Oracle 19c。

【问题讨论】:

    标签: sql xml oracle plsql


    【解决方案1】:

    这可能吗?

    不,不幸的是,它不是,因为 XMLTable 之类的 XML 函数与 XMLType 一起使用,它解析您的输入 xml(如果它是 CLOB 或 Varchar2,则来自您的 NLS_LANG 字符集,如果它是 BLOB,则来自指定的字符集)并将其存储在自己的内部代码页,当你得到它时,oracle 在你的 NLS_LANG 中返回它:

    SQL> with v as (select q'[<?xml version="1.1" encoding="blabla"?><root/>]' as vXML from dual)
      2  select xmltype(vXML) x from v;
    
    X
    ------------------------------------------------
    <?xml version="1.1" encoding="US-ASCII"?>
    <root/>
    

    如果我将 NLS_LANG 更改为 UTF8 会怎样:

    SQL> with v as (select q'[<?xml version="1.1" encoding="blabla"?><root/>]' as vXML from dual)
      2  select xmltype(vXML) x from v;
    
    X
    -----------------------------------------
    <?xml version="1.1" encoding="UTF-8"?>
    <root/>
    
    
    SQL> ! env | grep NLS_LANG
    NLS_LANG=american_america.UTF8
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 2019-08-19
      相关资源
      最近更新 更多