在 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);
我有一个 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);