Oracle
 sql >> Base de données >  >> RDS >> Oracle

simpleJdbcCall appelant la procédure Pl/SQL -- ORA-22922 valeur LOB inexistante

L'instance Clob est liée à 'oracleConnection' que vous utilisez pour la créer et SimpleJDBCCall utilise une autre connexion pour l'appel DB. Il existe deux sessions indépendantes du point de vue de la base de données et c'est la raison pour laquelle le clob n'existe pas dans la session utilisée par SimpleJDBCCall.

La connexion utilisée par SimpleJDBCCall doit être utilisée pour la création de Clob.

J'ai réussi à résoudre un problème similaire en implémentant SQLData et en extrayant la connexion actuelle :

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

MonBean :

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