在DB2中向具有DBCLOB 2g的数据库列插入Char值

在DB2中向具有DBCLOB 2g的数据库列插入Char值,db2,ibm-midrange,rpgle,Db2,Ibm Midrange,Rpgle,逻辑1: Dcl-s WkoutJSON Char(16000000); 此wkoutJSON字段包含内置JSON值 DbClobVar_Data = %Trim(%Graph(wkoutJSON)); DbClobvar_Len = %Len(DbClobVar_Data); DbClobVar_Data = %Trim(%Graph(wkoutJSON)); DbClobvar_Len = %Len(DbClobVar_Data); 然后我尝试插入到数

逻辑1:

Dcl-s WkoutJSON           Char(16000000); 
此wkoutJSON字段包含内置JSON值

DbClobVar_Data = %Trim(%Graph(wkoutJSON));
DbClobvar_Len  = %Len(DbClobVar_Data);  
DbClobVar_Data = %Trim(%Graph(wkoutJSON));
DbClobvar_Len  = %Len(DbClobVar_Data);  
然后我尝试插入到数据库中

Insert into TBLPOST(TBLPAYLD)
  Values(
    Method 1 // cast(:wkoutJSON as dbclob(2g) ccsid 1200)
    Method 2 // DBCLOB(:wkoutJSON, 1073741823, CODEUNITS32));
Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
我试过两种方法。两者都不起作用,因为wkoutJSON未声明或不可用

逻辑2:

Dcl-s WkoutJSON           Char(16000000); 
Dcl-s DbClobVar           SQLTYPE(DBCLOB:8386550); 
Dcl-s WkoutJSON           Char(16000000); 
Dcl-s DbClobVar           SQLTYPE(DBCLOB:8386550); 
此wkoutJSON字段包含内置JSON值

DbClobVar_Data = %Trim(%Graph(wkoutJSON));
DbClobvar_Len  = %Len(DbClobVar_Data);  
DbClobVar_Data = %Trim(%Graph(wkoutJSON));
DbClobvar_Len  = %Len(DbClobVar_Data);  
然后我尝试插入到数据库中

Insert into TBLPOST(TBLPAYLD)
  Values(
    Method 1 // cast(:wkoutJSON as dbclob(2g) ccsid 1200)
    Method 2 // DBCLOB(:wkoutJSON, 1073741823, CODEUNITS32));
Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
无法获取wkoutJSON未声明或不可用

请帮助我将char值插入dbclob

获取wkoutJSON未声明或不可用

这两种方法都试图在sql中使用
:wrkoutJSON
,因为
wrkoutJAOS
对于嵌入式sql来说太大了。但你也说过:

逻辑2:

Dcl-s WkoutJSON           Char(16000000); 
Dcl-s DbClobVar           SQLTYPE(DBCLOB:8386550); 
Dcl-s WkoutJSON           Char(16000000); 
Dcl-s DbClobVar           SQLTYPE(DBCLOB:8386550); 
此wkoutJSON字段包含内置JSON值

DbClobVar_Data = %Trim(%Graph(wkoutJSON));
DbClobvar_Len  = %Len(DbClobVar_Data);  
DbClobVar_Data = %Trim(%Graph(wkoutJSON));
DbClobvar_Len  = %Len(DbClobVar_Data);  
然后我尝试插入到数据库中

Insert into TBLPOST(TBLPAYLD)
  Values(
    Method 1 // cast(:wkoutJSON as dbclob(2g) ccsid 1200)
    Method 2 // DBCLOB(:wkoutJSON, 1073741823, CODEUNITS32));
Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
无法获取wkoutJSON未声明或不可用

这是令人费解的,因为您没有在SQL中使用wrkoutJSON,而这实际上几乎就是您想要的方式。但是,DbClobvar_数据不是varchar,因此在加载数据之前对其进行修剪不会有帮助。你真的需要:

DbClobVar_Data = %Graph(wkoutJSON);
DbClobvar_Len  = %Len(%trim(DbClobVar_Data));  

如果长度超过32766,则SQL不能使用类型为
char(n)
的rpgle变量,请参阅。也许您可以使用来加载数据,然后使用a来操作它。或者直接使用a是否可以将字符转换为图形,并将转换后的图形值移动到DBCLOB列字段?是的,您可以
dcl-s xxx ucs2(16383)ccsid(1200)
然后
xxx=WkoutJSON
,但是如果您使用
图形
ucs2
变量,则它被限制为16383个字符(32766字节)作为宿主变量。确保可以循环使用原始数据和
值:lob_locator=:lob_locator concat:xxx
完成后插入…:llob_定位器