Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XML标头中使用utf-8编码的sql xmltable进行分析时出错_Xml_Db2_Db2 400_Xmltable - Fatal编程技术网

在XML标头中使用utf-8编码的sql xmltable进行分析时出错

在XML标头中使用utf-8编码的sql xmltable进行分析时出错,xml,db2,db2-400,xmltable,Xml,Db2,Db2 400,Xmltable,我正在尝试使用DB2XMLTABLE函数在xml头中使用utf-8解析xml和xml字符串。如果我删除utf-8,一切都会运行得很好,但如果我将其保留在中,则会出现SQLSTATE 2200M错误。我错过了什么?我应该注意到,我在IBMiV7.2和7.3上运行这个 select * from xmltable(XMLNamespaces( DEFAULT 'IBA/FIXML-5-0-SP2'), '

我正在尝试使用DB2XMLTABLE函数在xml头中使用utf-8解析xml和xml字符串。如果我删除utf-8,一切都会运行得很好,但如果我将其保留在中,则会出现SQLSTATE 2200M错误。我错过了什么?我应该注意到,我在IBMiV7.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                                  
select*from xmltable(xmlnamespace(默认为'IBA/FIXML-5-0-SP2'),
“$d/FIXML/MktDataInc/Inc/SprdBnchmkCurve”
传递xmlparse(文档
'  
“)作为“d”
列点字符(2)路径“@POINT”,
cur_val char(10)路径'@Px'
)x

我认为
encoding=“utf-8”
不起作用的原因是字符串常量在IBMi中不是
utf-8
,而是EBCDIC。如果您正在解析来自IFS的文件,那么可能是utf-8格式。

您确实应该查看与SQLCode关联的错误消息。当我使用runsql脚本运行语句时,会出现以下错误,这清楚地表明错误类型为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   ; 
select*from xmltable(xmlnamespace(默认为'IBA/FIXML-5-0-SP2'),
“$d/FIXML/MktDataInc/Inc/SprdBnchmkCurve”
传递xmlparse(文档
铸造('
'作为CLOB(1M)CCSID 1208)作为“d”
列点字符(2)路径“@POINT”,
cur_val char(10)路径'@Px'
)x;

您发布的代码对我来说运行正常(在DB211.1.3.3上),无论是从CLP还是从DataStudio。我不确定你的问题是什么。我确实得到了
SQL0445W值“12M”已被截断。
因为您的
char(2)
太短,但没有
SQLSTATE 2200M:一个值未能解析为格式良好的XML文档或根据XML架构进行验证。
error这就是问题所在。我能够使用get_xml_文件直接读取IFS文件