Clob-forekomsten er knyttet til 'oracleConnection', som du bruger til at oprette den, og SimpleJDBCCall bruger en anden forbindelse til DB-kaldet. Der er to uafhængige sessioner fra DB-synspunktet, og det er grunden til, at klobben ikke eksisterer i den session, der bruges af SimpleJDBCCall.
Forbindelsen, som SimpleJDBCCall bruger, skal bruges til Clob-oprettelse.
Jeg har formået at løse et lignende problem ved at implementere SQLData og ved at udtrække den aktuelle forbindelse:
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);
...
}
...
}