将CLOB数据写入SQL RPGILE中的IFS文件

时间:2018-11-06 15:20:15

标签: ibm-midrange rpgle

我有一个RPGILE程序,它将带有XMLSERIALIZE的SQL返回到CHAR(32000)变量。 有时结果将超过32k。 最简单的方法是什么?如果我定义一个clob字段,然后使用它返回SQL结果,则程序不会编译。 我在QTEMP中使用Clob字段创建文件,然后将结果插入该文件中,然后将其写到IFS中,而不是在RPG中返回值。 但是XML文件最后似乎包含无效数据,并且不可用,有什么想法吗?

XML处理

D ResultXML       S          32000A   varying        
........
/FREE                                       
exec sql declare :ResultXml  variable;    
exec sql declare :SQLMESSAGE VARIABLE;  
exec sql                                                      
SELECT                                       
XMLSERIALIZE (content                                         
xmlelement   (NAME "Document",                                
xmlnamespaces(                                                
DEFAULT 'urn:iso:std:iso:20022:tech:xsd:pain.008.001.02'      
),                                                              
...
AS clob(1m)      ccsid 37   INCLUDING XMLDECLARATION      
as response                                                  
  INTO :ResultXML                                              
 FROM csp40      t                                           

文件写入

... then we write it to the IFS
EVAL fd = open(%trimr(resp_file): 74 :511);                   
if fd=-1;                                                     
   eval      RC = perror(resp_file);                          
   return;                                                     
endif;                                                        
 EVAL rc = write(fd:%addr(ResultXML)+2:%len(ResultXML));       
 EVAL rc = close(fd);                                          

1 个答案:

答案 0 :(得分:2)

签出DB2 SQL Embedded Programming guide

您可能希望将主机变量定义为SQL_TYPE,例如:

dcl-s ResultXML SQLTYPE(CLOB:32000);