Я создаю веб-службу, которая принимает входной 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
Пожалуйста, дайте мне знать, как решить эту проблему. Заранее спасибо.
Подготовленный оператор должен иметь тип 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