#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_CLOB2. возможно ли преобразовать char в graph и переместить преобразованное графическое значение в поле столбца DBCLOB?
3. Да, вы можете
dcl-s xxx ucs2(16383) ccsid(1200)
этоxxx = WkoutJSON
сделать, но если вы используете переменнуюGRAPH
orUCS2
, то она ограничена 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));