Oracle
 sql >> Datenbank >  >> RDS >> Oracle

simpleJdbcCall ruft Pl/SQL-Prozedur auf – ORA-22922 nicht vorhandener LOB-Wert

Die Clob-Instanz ist an die „oracleConnection“ gebunden, mit der Sie sie erstellen, und der SimpleJDBCCall verwendet eine andere Verbindung für den DB-Aufruf. Aus DB-Sicht gibt es zwei unabhängige Sessions und das ist der Grund, warum der Clob nicht in der von SimpleJDBCCall verwendeten Session existiert.

Die Verbindung, die SimpleJDBCCall verwendet, muss für die Clob-Erstellung verwendet werden.

Ich habe es geschafft, ein ähnliches Problem zu lösen, indem ich SQLData implementiert und die aktuelle Verbindung extrahiert habe:

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