sql >> Base de Datos >  >> RDS >> Oracle

simpleJdbcCall llamando al procedimiento Pl/SQL -- ORA-22922 valor LOB inexistente

La instancia de Clob está vinculada a la 'oracleConnection' que usa para crearla y SimpleJDBCCall usa otra conexión para la llamada a la base de datos. Hay dos sesiones independientes desde el punto de vista de DB y esa es la razón por la cual el clob no existe en la sesión utilizada por SimpleJDBCCall.

La conexión que usa SimpleJDBCCall debe usarse para la creación de Clob.

Logré resolver un problema similar implementando SQLData y extrayendo la conexión actual:

Map<String, Object> values = new HashMap<>();
values.put("IN_bean_type", new MyBean());
simpleJdbcCallOperations.execute(values);

MiBean:

class MyBean implements SQLData {
    ...
    @Override
    public void writeSQL(SQLOutput stream) throws SQLException {
        ...
        Clob clob = ((OracleSQLOutput)stream).getSTRUCT().getJavaSqlConnection().createClob(); //hack to get the current connection
        clob.setString(1, "stringValue");
        stream.writeClob(clob);
        ...
    }
    ...
}