3

这个 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 中获取编码?

例如 - 我希望输出类似于

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

参考 -

从数据库生成 XML 数据

4

3 回答 3

4
select xmlroot (xmltype ('<poid>143598</poid>')
                  , version '1.0" encoding="UTF-8'
                  ) "XMLRoot"
  from dual;
于 2012-10-08T15:26:02.123 回答
0

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

代替

version '1.0'

version '1.0" encoding="utf-8'

输出

XMLROOT
--------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<poid>143598</poid>
于 2012-10-08T15:27:26.123 回答
0

这很简单,但让我解释一下 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>
于 2019-07-15T10:33:10.757 回答