Записать данные CLOB в файл IFS в SQL RPGILE - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть программа RPGILE, которая возвращает SQL с XMLSERIALIZE в переменную CHAR (32000). Иногда результат будет больше 32 КБ. Какой самый простой способ сделать это? Программа не компилируется, если я определяю поле 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);                                          

1 Ответ

0 голосов
/ 06 ноября 2018

Ознакомьтесь с DB2 SQL Embedded Руководство по программированию .

Возможно, вы хотите определить переменную хоста как SQL_TYPE, например:

dcl-s ResultXML SQLTYPE(CLOB:32000);
...