在 SQL RPGLE 中将 CLOB 数据写入 IFS 文件

Write CLOB data to IFS file in SQL RPGILE

我有一个 RPGILE 程序,它正在 returning 一个 SQL 和 XMLSERIALIZE 到一个 CHAR(32000) 变量。 有时结果会超过 32k 大小。 最简单的方法是什么?如果我定义一个 clob 字段然后将其用于 return SQL 结果,则程序不会编译。 我开始在 QTEMP 中创建一个带有 clob 字段的文件,然后我没有 returning 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);                                          

查看 DB2 SQL Embedded Programming guide

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

dcl-s ResultXML SQLTYPE(CLOB:32000);