Oracle
 sql >> Database >  >> RDS >> Oracle

simpleJdbcCall chiamando la procedura Pl/SQL -- ORA-22922 valore LOB inesistente

L'istanza Clob è legata a 'oracleConnection' che usi per crearla e SimpleJDBCCall usa un'altra connessione per la chiamata DB. Esistono due sessioni indipendenti dal punto di vista del DB ed è per questo che il clob non esiste nella sessione utilizzata da SimpleJDBCCall.

La connessione utilizzata da SimpleJDBCCall deve essere utilizzata per la creazione Clob.

Sono riuscito a risolvere un problema simile implementando SQLData ed estraendo la connessione corrente:

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

MyBean:

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);
        ...
    }
    ...
}