Db2 如何在RPG中构建一个大字符串并将其写入DDL CLOB字段
后续行动 我想在RPG中构建一个大字符串,并将其写入DDL CLOB字段 然而,即使我在RPG代码中使用CLOB字段和DDL CLOB字段,我似乎也只能使用65531个字符,因为数据通过临时字符串值调用“wkClob_data”传递。我能克服这个限制吗? 可能使用用户空间??[仍在V5R4上] DDL: 角色扮演:Db2 如何在RPG中构建一个大字符串并将其写入DDL CLOB字段,db2,ibm-midrange,clob,db2-400,rpgle,Db2,Ibm Midrange,Clob,Db2 400,Rpgle,后续行动 我想在RPG中构建一个大字符串,并将其写入DDL CLOB字段 然而,即使我在RPG代码中使用CLOB字段和DDL CLOB字段,我似乎也只能使用65531个字符,因为数据通过临时字符串值调用“wkClob_data”传递。我能克服这个限制吗? 可能使用用户空间??[仍在V5R4上] DDL: 角色扮演: 在我放弃并创建了一个可以从RPG调用的java类之前,我正在猜测我可能会在SQLRPGLE中尝试什么 exec SQL
在我放弃并创建了一个可以从RPG调用的java类之前,我正在猜测我可能会在SQLRPGLE中尝试什么
exec SQL
INSERT INTO MYFILE (MYDEC, MYCHAR, MYCLOB)
VALUES (123, 'Some Description',:wkClob || :wkclob1 || :wkclob2);
exec SQL
update myfile set substring(myclob:32323412:11) = 'Hello World';
在我放弃并创建了一个可以从RPG调用的java类之前,我正在猜测我可能会在SQLRPGLE中尝试什么
exec SQL
INSERT INTO MYFILE (MYDEC, MYCHAR, MYCLOB)
VALUES (123, 'Some Description',:wkClob || :wkclob1 || :wkclob2);
exec SQL
update myfile set substring(myclob:32323412:11) = 'Hello World';
数据来自哪里 它真的需要通过RPG程序吗?IBMi上也提供了C/C++锤子永远是正确的工具,并非所有东西都是钉子。 如果你被RPG困住了,下面的可能会起作用
D wkValue S 65530a varying
D wkClob1 S sqltype(CLOB:65530)
D wkClob2 S sqltype(CLOB:65530)
//<snip>
exec SQL
INSERT INTO MYFILE (MYDEC, MYCHAR, MYCLOB)
VALUES (123, 'Some Description',:wkClob1 CONCAT :wkClob2);
D WKS 65530a值变化
D wkClob1 S sqltype(CLOB:65530)
D wkClob2 S sqltype(CLOB:65530)
//
执行SQL
插入MYFILE(MYDEC、MYCHAR、MYCLOB)
值(123,‘一些描述’,:wkClob1 CONCAT:wkClob2);
但老实说,正确的方法可能是直接利用这个机会
红皮书中有一些关于从RPG使用CLI的代码信息 数据来自哪里 它真的需要通过RPG程序吗?IBMi上也提供了C/C++锤子永远是正确的工具,并非所有东西都是钉子。 如果你被RPG困住了,下面的可能会起作用
D wkValue S 65530a varying
D wkClob1 S sqltype(CLOB:65530)
D wkClob2 S sqltype(CLOB:65530)
//<snip>
exec SQL
INSERT INTO MYFILE (MYDEC, MYCHAR, MYCLOB)
VALUES (123, 'Some Description',:wkClob1 CONCAT :wkClob2);
D WKS 65530a值变化
D wkClob1 S sqltype(CLOB:65530)
D wkClob2 S sqltype(CLOB:65530)
//
执行SQL
插入MYFILE(MYDEC、MYCHAR、MYCLOB)
值(123,‘一些描述’,:wkClob1 CONCAT:wkClob2);
但老实说,正确的方法可能是直接利用这个机会
红皮书中有一些关于从RPG使用CLI的代码信息 根据,对于大于有效主机变量的字段,您有两个选项
dcl-s empnum Char(6);
dcl-s resume SqlType(clob_locator);
dcl-s lobind Int(5);
dcl-s di_buffer SqlType(clob_locator);
dcl-s buffer SqlType(clob: 1024);
dcl-s di_begin_loc Int(20);
dcl-s di_end_loc Int(20);
dcl-proc lobloc;
exec sql
declare C1 cursor for
select empno, resume
from emp_resume
where resume_format = 'ascii'
and empno <> 'A00130';
exec sql open C1;
buffer_len = 0;
dow 1=1;
exec sql fetch C1 into :empnum, :resume :lobind;
if sqlcode <> 0;
// error, warning, or no data
leave;
endif;
if lobind < 0;
// LOB value is null
iter;
endif;
// Find the "Department Information" section
exec sql
values (posstr(:resume, 'Department Information'))
into :di_begin_loc;
// Find the "Education" section
exec sql
values (posstr(:resume, 'Education'))
into :di_end_loc;
// Get the Department information only into a new LOB
exec sql
values (substr(:resume, :di_begin_loc, :di_end_loc - :di_begin_loc))
into :di_buffer;
// Append the department info into a new CLOB field
exec sql
values (:buffer || :di_buffer) into :buffer;
enddo;
exec sql free locator :resume, :di_buffer;
return;
end-proc;
dcl-s empnum字符(6);
dcl-s恢复SqlType(clob_定位器);
dcl-s lobind Int(5);
dcl-s di_缓冲区SqlType(clob_定位器);
dcl-s缓冲区SqlType(clob:1024);
dcl-s开始位置Int(20);
dcl-s di_end_loc Int(20);
dcl proc lobloc;
执行sql
为声明C1游标
选择empno,继续
从emp_恢复
其中resume_格式='ascii'
以及empno‘A00130’;
execsqlopenc1;
缓冲区长度=0;
道指1=1;
execsqlfetchc1到:empnum,:resume:lobind;
如果sqlcode为0;
//错误、警告或无数据
离开
endif;
如果lobind<0;
//LOB值为空
iter;
endif;
//查找“部门信息”部分
执行sql
值(posstr(:resume,“部门信息”)
分为:开始位置;
//查找“教育”部分
执行sql
价值观(posstr(:简历,“教育”))
分为:底端位置;
//仅在新LOB中获取部门信息
执行sql
值(substr(:resume,:di_begin_loc,:di_end_loc-:di_begin_loc))
进入:di_缓冲区;
//将部门信息附加到新的CLOB字段中
执行sql
值(:buffer | |:di|u buffer)转换为:buffer;
enddo;
exec-sql-free定位器:resume,:di_buffer;
返回;
结束进程;
注意您可以使用定位器以及所示的选择按钮插入或更新LOB字段
通过文件字段,DB2将LOB的内容传输到IFS中的文件或从中传输。流文件API可用于读取或写入文件。知识中心中有一个类似于LOB文件定位器示例的示例。根据,对于大于有效主机变量的字段,您有两个选项
dcl-s empnum Char(6);
dcl-s resume SqlType(clob_locator);
dcl-s lobind Int(5);
dcl-s di_buffer SqlType(clob_locator);
dcl-s buffer SqlType(clob: 1024);
dcl-s di_begin_loc Int(20);
dcl-s di_end_loc Int(20);
dcl-proc lobloc;
exec sql
declare C1 cursor for
select empno, resume
from emp_resume
where resume_format = 'ascii'
and empno <> 'A00130';
exec sql open C1;
buffer_len = 0;
dow 1=1;
exec sql fetch C1 into :empnum, :resume :lobind;
if sqlcode <> 0;
// error, warning, or no data
leave;
endif;
if lobind < 0;
// LOB value is null
iter;
endif;
// Find the "Department Information" section
exec sql
values (posstr(:resume, 'Department Information'))
into :di_begin_loc;
// Find the "Education" section
exec sql
values (posstr(:resume, 'Education'))
into :di_end_loc;
// Get the Department information only into a new LOB
exec sql
values (substr(:resume, :di_begin_loc, :di_end_loc - :di_begin_loc))
into :di_buffer;
// Append the department info into a new CLOB field
exec sql
values (:buffer || :di_buffer) into :buffer;
enddo;
exec sql free locator :resume, :di_buffer;
return;
end-proc;
dcl-s empnum字符(6);
dcl-s恢复SqlType(clob_定位器);
dcl-s lobind Int(5);
dcl-s di_缓冲区SqlType(clob_定位器);
dcl-s缓冲区SqlType(clob:1024);
dcl-s开始位置Int(20);
dcl-s di_end_loc Int(20);
dcl proc lobloc;
执行sql
为声明C1游标
选择empno,继续
从emp_恢复
其中resume_格式='ascii'
以及empno‘A00130’;
execsqlopenc1;
缓冲区长度=0;
道指1=1;
execsqlfetchc1到:empnum,:resume:lobind;
如果sqlcode为0;
//错误、警告或无数据
离开
endif;
如果lobind<0;
//LOB值为空
iter;
endif;
//查找“部门信息”部分
执行sql
值(posstr(:resume,“部门信息”)
分为:开始位置;
//查找“教育”部分
执行sql
价值观(posstr(:简历,“教育”))
分为:底端位置;
//仅在新LOB中获取部门信息
执行sql