Вставка значения Char в столбец базы данных, имеющий DBCLOB 2g в DB2

#db2 #ibm-midrange #rpgle

#db2 #ibm-средний диапазон #rpgle

Вопрос:

Логика 1:

 Dcl-s WkoutJSON           Char(16000000); 
  

Это поле wkoutJSON содержит встроенное значение JSON

Затем я пытаюсь вставить в базу данных

 Insert into TBLPOST(TBLPAYLD)
  Values(
    Method 1 // cast(:wkoutJSON as dbclob(2g) ccsid 1200)
    Method 2 // DBCLOB(:wkoutJSON, 1073741823, CODEUNITS32));
  

Я пробовал двумя способами. оба не работают, получение wkoutJSON не объявлено или не используется

Логика 2:

 Dcl-s WkoutJSON           Char(16000000); 
Dcl-s DbClobVar           SQLTYPE(DBCLOB:8386550); 
  

Это поле wkoutJSON содержит встроенное значение JSON

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

Затем я пытаюсь вставить в базу данных

 Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
  

Не работает получение wkoutJSON не объявлено или не используется

Пожалуйста, помогите мне вставить значения char в dbclob.

Комментарии:

1. Переменная типа char(n) rpgle не может использоваться SQL, если ее длина превышает 32766, см. Здесь . Возможно, вы можете использовать GET_DBCLOB_FROM_FILE для загрузки данных, а затем ЛОКАТОР LOB для управления им. Или напрямую используйте ссылку на файл DB_CLOB

2. возможно ли преобразовать char в graph и переместить преобразованное графическое значение в поле столбца DBCLOB?

3. Да, вы можете dcl-s xxx ucs2(16383) ccsid(1200) это xxx = WkoutJSON сделать, но если вы используете переменную GRAPH or UCS2 , то она ограничена 16383 символами (32766 байтами) в качестве главной переменной. Конечно, вы можете перебирать исходные данные и VALUES :lob_locator = :lob_locator concat :xxx и когда закончите insert ... :llob_locator

Ответ №1:

 Insert into TBLPOST(TBLPAYLD)
  Values(
    Method 1 // cast(:wkoutJSON as dbclob(2g) ccsid 1200)
    Method 2 // DBCLOB(:wkoutJSON, 1073741823, CODEUNITS32));
  

получение wkoutJSON не объявлено или не используется

Оба эти способа пытаются использовать :wrkoutJSON в sql, потому wrkoutJAOS что они слишком велики для встроенного SQL. Но вы также сказали:

Логика 2:

 Dcl-s WkoutJSON           Char(16000000); 
Dcl-s DbClobVar           SQLTYPE(DBCLOB:8386550); 
  

Это поле wkoutJSON содержит встроенное значение JSON

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

Затем я пытаюсь вставить в базу данных

 Insert into TBLPOST(TBLPAYLD)
  Values(:DbClobvar);
  

Не работает получение wkoutJSON не объявлено или не используется

Это вызывает недоумение, потому что вы не используете wrkoutJSON в SQL, и это фактически почти способ сделать то, что вы хотите. Но DbClobvar_DATA не является переменной, поэтому обрезка данных перед их загрузкой не поможет. вам действительно нужно:

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