在XML标头中以utf-8编码与sql xmltable进行解析时发生错误

时间:2018-06-19 21:00:30

标签: xml db2 db2-400 xmltable

我正在尝试使用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                                  

2 个答案:

答案 0 :(得分:0)

我认为encoding="utf-8"不起作用的原因是IBM i中的字符串常量不是utf-8,而是EBCDIC。如果要从IFS解析文件,则文件格式可能为utf-8。

答案 1 :(得分:0)

您确实应该查看与SQLCode相关的错误消息。当我使用“运行SQL脚本”运行语句时,出现以下错误,该错误明确表明错误类型为7,这意味着内部编码与外部编码不匹配。

Error Message

正如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   ;