【问题标题】:Oracle SQL XML Functions - How to get encoding in XML Prolog?Oracle SQL XML 函数 - 如何在 XML Prolog 中获取编码?
【发布时间】:2012-10-08 15:10:44
【问题描述】:

这个 SQL

SELECT XMLRoot(XMLType('<poid>143598</poid>'), VERSION '1.0', STANDALONE YES)
  AS xmlroot FROM DUAL; 

产生如下输出

XMLROOT
--------------------------------------
<?xml version="1.0" standalone="yes"?>
<poid>143598</poid>

如何在我的 xml prolog 中获取编码?

Ex - 我希望输出类似于

XMLROOT
--------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<poid>143598</poid>

参考-

Generate XML Data from the database

【问题讨论】:

    标签: sql oracle oracle10g sqlxml


    【解决方案1】:
    select xmlroot (xmltype ('<poid>143598</poid>')
                      , version '1.0" encoding="UTF-8'
                      ) "XMLRoot"
      from dual;
    

    【讨论】:

    • 你不能以这种方式传递编码,至少对于 oracle 12c
    • 是的,至少在 11g 中可以。这是 2012 年的答案。
    【解决方案2】:

    很奇怪......但看起来版本参数可以包含任何内容 -

    替换

    version '1.0'
    

    version '1.0" encoding="utf-8'
    

    输出

    XMLROOT
    --------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <poid>143598</poid>
    

    【讨论】:

      【解决方案3】:

      这很简单,但让我解释一下Oracle的可能逻辑:

      字符数据默认存储在数据库编码中。如果要指定编码,则它可能与数据库编码不同。好的,让它成为 BLOB,即以所需编码表示的八位字节流。所以我们应该使用XMLSERIALIZE函数来创建任何编码的表示(包括默认的DB编码)

      select  
        xmlserialize(document xmltype('<Envelop>Any UTF charachers. Tous les caractères UTF. כל תווי UTF </Envelop>') as blob encoding 'UTF-8' version '1.0')
      from dual;
      

      如果您的默认 DB 编码是 UTF-8,那么您也可以将此调用包装到 to_clob(…) 甚至 to_char(…) 以查看结果。对我来说

      select  
        to_char(xmlserialize(document xmltype('<Envelop>Any UTF charachers. Tous lescaractères UTF. כל תווי UTF </Envelop>') as blob encoding 'UTF-8' version '1.0'))
      from dual;
      

      给予:

      <?xml version="1.0" encoding="UTF-8"?>
      <Envelop>Any UTF charachers. Tous les caractères UTF. כל תווי UTF </Envelop>
      

      【讨论】:

        猜你喜欢
        • 2022-01-19
        • 2020-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多