我想將大的XML字符串(可能長於32K或64K)保存到AS400文件字段中。 DDS或SQL文件都可以。下面的SQL文件示例。As400中的非常大的字段ISeries數據庫
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 OS的v5R4上。
謝謝!
查爾斯在下面的回答顯示瞭如何提取數據。我想插入數據。此代碼會運行,但會引發'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',它只是有無效的隨機數據。 – jmarkmurphy
添加'longdesc_data = wLongDesc; longdesc_len =%len(%trim(wLongDesc));'在插入之前。 – jmarkmurphy
您也可能希望將'exec sql set option commit = * none;'添加到c規範的頂部,因此您不必記得設置您的承諾控制選項。適當地更改'* none'。 – jmarkmurphy