【问题标题】:SQL Plus XML parser doesn't allow å ä öSQL Plus XML 解析器不允许 å ä ö
【发布时间】:2013-02-26 19:22:27
【问题描述】:

我有一个包含 XMLType 的表。我的标签包含 Å 和 Ö,例如“ÅR” 我已经使用 Oracle SQL Developer 对其进行了解析,但是一旦我尝试在 Sql Plus 中使用相同的查询,它就不会接受 åäö。不知道怎么解决。。

所以在终端中(原始文件或 .sql 文件)

select count(d.year)
from fic data, XMLTable('/Arkiv/Record'             
PASSING data.xmldata                
COLUMNS             
YEAR    varchar2(20)    PATH    'ÅR'
) d where data.id =7;

会报如下错误:

ORA-19114: XPST0003 - error during parsing the XQuery expression:
LPX-00800: XQuery invalid token ''
1   ÅR
-  ^

【问题讨论】:

  • 不确定是否可以在路径中使用实体引用,但请尝试PATH 'ÅR'...?
  • 不,HTML 代码不起作用
  • 我猜这与终端中的编码有关?或 SQL Plus..
  • PATH UNISTR('\00C5R') 怎么样?
  • EvilBob22,不。 windows prompt中的chcp 1252解决了windows中的问题,但我在linux提示下无法解决

标签: sql xml xml-parsing sqlplus oracle-sqldeveloper


【解决方案1】:

这很可能是 sqlplus(或您从中调用它的 shell)以错误的编码提供数据的问题。

将文字中的非ASCII字符替换为UTL_I18N.raw_to_char ( HEXTORAW ( '<character_as_octet_sequence>' ), '<charset_encoding>' )。这会将字符转换为数据库字符集,并且应该通过其间的任何工具,因为您只需要 us-ascii 符号来进行规范。

在你的例子中:

  • 圆环 -> UTL_I18N.raw_to_char ( HEXTORAW ( 'C5' ), 'WE8ISO8859P15' )
  • O 变音 -> UTL_I18N.raw_to_char ( HEXTORAW ( 'D6' ), 'WE8ISO8859P15' )

【讨论】:

  • 是的,似乎是我调用的 shell,chcp 1252 在 Windows 中解决了它,但我没有找到任何适用于 Linux 终端的好的解决方案
  • 建议的方法适用于任何操作系统。注意:您不必知道 shell 使用的字符集中的十六进制编码,只有在 some 字符集中 oracle 知道。 evilbob22 的变体也将起作用,但是,文档说 UNISTR 转换为国家字符集而不是 db 字符集。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-30
  • 2017-04-04
  • 2020-08-03
  • 1970-01-01
  • 2011-07-28
相关资源
最近更新 更多