【发布时间】:2017-05-08 17:20:45
【问题描述】:
我想将一个大的 XML 字符串(可能长于 32K 或 64K)保存到 AS400 文件字段中。 DDS 或 SQL 文件都可以。下面是 SQL 文件示例。
CREATE TABLE MYLIB/PRODUCT
(PRODCODE DEC (5 ) NOT NULL WITH DEFAULT,
PRODDESC CHAR (30 ) NOT NULL WITH DEFAULT,
LONGDESC CLOB (70K ) ALLOCATE(1000) NOT NULL WITH DEFAULT)
我们将使用 RPGLE 来读取和写入字段。
目标是然后在客户端通过 ODBC 连接提取数据。
AS400 字符字段似乎有 32K 的限制,所以这不是很好的选择。
我有什么选择?我一直在阅读 CLOB,但似乎存在将大字符串写入 CLOBS 和远程读取 CLOB 字段的限制。请注意,客户端(仍然)在 AS400 操作系统的 v5R4 上。
谢谢!
Charles 下面的回答显示了如何提取数据。我想插入数据。此代码运行,但引发“22501”SQL 错误。
D wLongDesc s 65531a varying
D longdesc s sqltype(CLOB:65531)
/free
//eval longdesc = *ALL'123';
eval Wlongdesc = '123';
exec SQL
INSERT INTO PRODUCT (PRODCODE, PRODDESC, LONGDESC)
VALUES (123, 'Product Description', :LongDesc );
if %subst(sqlstt:1:2) <> '00';
// an error occurred.
endif;
// get length explicitly, variables are setup by pre-processor
longdesc_len = %len(%trim(longdesc_data));
wLongDesc = %subst(longdesc_data:1:longdesc_len);
/end-free
C Eval *INLR = *on
C Return
附加问题:这种技术是否适合存储我以后想通过 ODBC 连接提取的数据? ODBC 将 CLOB 读取为指针还是可以提取文本?
【问题讨论】:
-
你在插入之前没有加载
longdesc,它只是有无效的随机数据。 -
在插入前添加
longdesc_data = wLongDesc; longdesc_len = %len(%trim(wLongDesc));。 -
您可能还想将
exec sql set option commit = *none;添加到 c 规范的顶部,这样您就不必记住设置您的承诺控制选项。适当更改*none。 -
这是试验java的好时机。 java中的字符串没有实际限制。 ( 2^31 幂之类的)。用于写入数据库的 java 程序。也许将 xml 的 ifs 路径传递给 java 程序。祝你好运。提示在 IFS 上使用 eclipse 存储创建一个可运行的 jar 文件。
标签: db2 ibm-midrange clob db2-400 rpgle