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