Невозможно сохранить данные 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

1 ответ

Решение

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

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

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

Другие вопросы по тегам