Oracle
 sql >> Baza danych >  >> RDS >> Oracle

simpleJdbcCall wywołująca procedurę Pl/SQL -- ORA-22922 nieistniejąca wartość LOB

Instancja Clob jest powiązana z „oracleConnection”, której używasz do jej utworzenia, a SimpleJDBCCall używa innego połączenia do wywołania bazy danych. Istnieją dwie niezależne sesje z punktu widzenia DB i to jest powód, dla którego clob nie istnieje w sesji używanej przez SimpleJDBCCall.

Połączenie, którego używa SimpleJDBCCall, musi być używane do tworzenia Cloba.

Udało mi się rozwiązać podobny problem, implementując SQLData i wyodrębniając bieżące połączenie:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Różnica między zapytaniami o uprawnienia w tabelach

  2. Logika biznesowa:warstwa bazy danych lub aplikacji

  3. Zmień numer daty w Excelu na datę Oracle

  4. ROWDEPENDENCIES Narzut w Oracle

  5. Zmień składnik strefy czasowej TIMESTAMP WITH TIMEZONE w Oracle