Передача XML в виде CLOB в Oracle выдает ошибку «ORA-22922: несуществующее значение большого объекта»

1

Я создаю веб-службу, которая принимает входной XML в полезной нагрузке и сохраняет его в базе данных.

В слое DAO я создаю объект clob с XML-строкой, например:

CLOB clob = CLOB.createTemporary(conn,false,CLOB.MODE_READWRITE);
            clob.putString(1,inputXml);

Я передаю этот объект clob в Хранимую процедуру:

declareParameter(new SqlParameter("i_xml", OracleTypes.CLOB));

и в исполняемом методе:

params.put("i_xml",clob);       
Map<?, ?> result = execute(params);

Поэтому, когда я вызываю этот веб-сервис, я вижу, что XML отправляется в БД Oracle должным образом, но я получаю сообщение об ошибке из базы данных:

System Error occured while Creating ORA-22922: nonexistent LOB value

Пожалуйста, дайте мне знать, как решить эту проблему. Заранее спасибо.

  • 0
    Возможно, этот ответ может помочь вам.
  • 0
    Вам также следует помнить о согласованности чтения больших объектов и избегать коммитов или откатов внутри процедуры.
Показать ещё 1 комментарий
Теги:
spring
clob

1 ответ

0

Подготовленный оператор должен иметь тип OracleCallableStatement, затем следовать образцу кода, как показано ниже

        stmt = (OracleCallableStatement) conn.prepareCall("{call MSG(" + repeatQmarks(7) + ")}");
        stmt.setBigDecimal("P_W_EVENT_LOG_KEY", wEventLogKey); //1      P_W_EVENT_LOG_KEY   IN     NUMBER,
        stmt.setString("P_DOMAIN", domain); //2      P_DOMAIN            IN     VARCHAR2,
        stmt.setString("P_EXCPT_CD", sqlExCd); //3      P_EXCPT_CD          IN     VARCHAR2,
        stmt.setString("P_EXCPT_MSG", sqlExMsg); //4      P_EXCPT_MSG         IN     VARCHAR2,
        stmt.setStringForClob("P_PAYLOAD_IN", "My TEST CLOB 1"); //5      P_PAYLOAD_IN        IN     CLOB DEFAULT NULL,
        stmt.setStringForClob("P_PAYLOAD_OUT", "My TEST CLOB 2"); //6      P_PAYLOAD_OUT       IN     CLOB DEFAULT NULL,
        stmt.registerOutParameter("P_RET_CD", java.sql.Types.NUMERIC); //7      P_RET_CD               OUT NUMBER);

Обратите внимание, что 5 и 6-ые параметры являются фактически строками, для метода

setStringForClob

Ещё вопросы

Сообщество Overcoder
Наверх
Меню