首页 > 解决方案 > 将 CLOB 数据写入 SQL RPGILE 中的 IFS 文件

问题描述

我有一个 RPGILE 程序将带有 XMLSERIALIZE 的 SQL 返回到 CHAR(32000) 变量。有时结果会超过 32k 大小。最简单的方法是什么?如果我定义一个 clob 字段然后使用它返回 SQL 结果,则程序不会编译。我让它在 QTEMP 中使用 clob 字段创建一个文件,然后我没有在 RPG 中返回值,而是将结果插入到该文件中,然后将其写入 IFS。但是 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);                                          

标签: ibm-midrangerpgle

解决方案


查看DB2 SQL 嵌入式编程指南

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

dcl-s ResultXML SQLTYPE(CLOB:32000);

推荐阅读