我正在尝试使用db2 xmltable函数在xml标头中使用utf-8解析和xml字符串。如果删除utf-8,一切运行良好,但是如果将其保留,则会出现SQLSTATE 2200M错误。我想念什么?我应该注意,我正在IBM i v7.2和7.3上运行它
select * from xmltable(XMLNamespaces( DEFAULT 'IBA/FIXML-5-0-SP2'),
'$d/FIXML/MktDataInc/Inc/SprdBnchmkCurve'
passing xmlparse(document
'<?xml version="1.0" encoding="utf-8" ?>
<FIXML xmlns="IBA/FIXML-5-0-SP2" v="FIX.5.0SP2" xv="167" cv="IBA"
s="2013-10-14">
<MktDataInc TrdDt="2018-06-19">
<Inc UpdtAct="0" Typ="3" Tm="10:55:05">
<SprdBnchmkCurve Ccy="USD" Name="LIBOR" Point="12M" Px="2.7625"
PxTyp="24" />
</Inc>
<Inc UpdtAct="0" Typ="3" Tm="10:55:05">
<SprdBnchmkCurve Ccy="USD" Name="LIBOR" Point="1M" Px="2.08788"
PxTyp="24" />
</Inc> </MktDataInc>
</FIXML> ' ) as "d"
columns POINT char(2) path '@Point',
cur_val char(10) path '@Px'
) x
答案 0 :(得分:0)
我认为encoding="utf-8"
不起作用的原因是IBM i中的字符串常量不是utf-8
,而是EBCDIC。如果要从IFS解析文件,则文件格式可能为utf-8。
答案 1 :(得分:0)
您确实应该查看与SQLCode相关的错误消息。当我使用“运行SQL脚本”运行语句时,出现以下错误,该错误明确表明错误类型为7,这意味着内部编码与外部编码不匹配。
正如jmarkmurphy所说,数据是EBCDIC,但您说的是UTF-8。如果您确实需要UTF-8,则可以将数据强制转换为UTF-8。
select * from xmltable(XMLNamespaces( DEFAULT 'IBA/FIXML-5-0-SP2'),
'$d/FIXML/MktDataInc/Inc/SprdBnchmkCurve'
passing xmlparse(document
CAST('<?xml version="1.0" encoding="utf-8" ?>
<FIXML xmlns="IBA/FIXML-5-0-SP2" v="FIX.5.0SP2" xv="167" cv="IBA"
s="2013-10-14">
<MktDataInc TrdDt="2018-06-19">
<Inc UpdtAct="0" Typ="3" Tm="10:55:05">
<SprdBnchmkCurve Ccy="USD" Name="LIBOR" Point="12M" Px="2.7625"
PxTyp="24" />
</Inc>
<Inc UpdtAct="0" Typ="3" Tm="10:55:05">
<SprdBnchmkCurve Ccy="USD" Name="LIBOR" Point="1M" Px="2.08788"
PxTyp="24" />
</Inc> </MktDataInc>
</FIXML> ' AS CLOB(1M) CCSID 1208)) as "d"
columns POINT char(2) path '@Point',
cur_val char(10) path '@Px'
) x ;