甲骨文的SQL XML功能 - 如何获得XML Prolog的编码?(Oracle SQL XML

2019-09-23 16:54发布

这个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序言如何获得编码?

恩 - 我想输出是这样的

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

参考 -

生成从数据库中的XML数据

Answer 1:

select xmlroot (xmltype ('<poid>143598</poid>')
                  , version '1.0" encoding="UTF-8'
                  ) "XMLRoot"
  from dual;


Answer 2:

奇怪......不过貌似版本参数可以有这样的事 -

更换

version '1.0'

version '1.0" encoding="utf-8'

产出

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


Answer 3:

这是很容易,但让我解释一下甲骨文的可能的逻辑:

字符数据默认存储在数据库中的编码。 如果你想指定编码则很可能是由数据库编码不同。 行,让它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;

如果您的默认编码数据库是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>


文章来源: Oracle SQL XML Functions - How to get encoding in XML Prolog?