sql >> Databasteknik >  >> RDS >> Oracle

simpleJdbcCall anropar Pl/SQL-procedur -- ORA-22922 obefintligt LOB-värde

Clob-instansen är bunden till 'oracleConnection' som du använder för att skapa den och SimpleJDBCCall använder en annan anslutning för DB-anropet. Det finns två oberoende sessioner från DB-synpunkt och det är anledningen till att klumpen inte finns i sessionen som används av SimpleJDBCCall.

Anslutningen som SimpleJDBCCall använder måste användas för att skapa Clob.

Jag har lyckats lösa ett liknande problem genom att implementera SQLData och genom att extrahera den aktuella anslutningen:

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


  1. MySQL kontrollera om det finns flera rader

  2. MySQL-datakällan visas inte i Visual Studio

  3. Hur GET_FORMAT() fungerar i MariaDB

  4. ASP.NET API:Ingen databasleverantör har konfigurerats för denna DbContext