Невозможно сохранить данные CLOB в определенном столбце CLOB в DB2

Я думаю, это повторяющаяся проблема, но пока не нашел правильного решения. В основном я пытаюсь вставить огромный XML, то есть 32000+ символов, в столбец CLOB с помощью процедуры DB2. Вставка не удалась с приведенной ниже ошибкой, похоже, что DB2 рассматривает ввод как тип данных String, а не CLOB. Не могли бы вы подсказать, что нужно сделать?

SP

CREATE OR REPLACE PROCEDURE logging (IN HEADERDATA CLOB(10M))
LANGUAGE SQL
BEGIN
    INSERT INTO Logging(Header) VALUES (HEADERDATA);
    COMMIT;
END

Ошибка

The string constant beginning with 
"'<?xml version="1.0" encoding="UTF-8"?><XXXXXXXX xmlns:xsi="http:" is too long.. 
SQLCODE=-102, SQLSTATE=54002, DRIVER=XXXXXX

person SomMS    schedule 02.07.2017    source источник
comment
Пожалуйста, покажите, как вы вызываете свою хранимую процедуру.   -  person mustaccio    schedule 02.07.2017
comment
Регистрация ЗВОНКОВ ('‹‹данные с 40000 символов››')   -  person SomMS    schedule 02.07.2017
comment
и запустить этот анонимный блок в IBM data-studio. JFYI.   -  person SomMS    schedule 02.07.2017


Ответы (1)


Символьные литералы в DB2 ограничены примерно 32 КБ. Для обработки больших больших объектов вам нужно избегать использования литеральных значений SQL.

Один из способов сделать это без дополнительного программирования — записать ваше [будущее] содержимое CLOB в файл и использовать IMPORT или LOAD для вставки его содержимого в столбец.

В качестве альтернативы вы можете обернуть простую программу Java вокруг вызова процедуры, где вы будете использовать PreparedStatement.setClob() для обработки вашего большого XML-документа.

person mustaccio    schedule 02.07.2017
comment
Спасибо, я могу работать с переменной хоста, такой как регистрация CALL ('?'). Попробую с кодом Java, как вы сказали, и вернемся. - person SomMS; 03.07.2017