Oracle
 sql >> база данни >  >> RDS >> Oracle

simpleJdbcCall извикване на Pl/SQL процедура -- ORA-22922 несъществуваща LOB стойност

Екземплярът на Clob е свързан с „oracleConnection“, който използвате, за да го създадете, а SimpleJDBCCall използва друга връзка за извикването на DB. Има две независими сесии от гледна точка на DB и това е причината clob да не съществува в сесията, използвана от SimpleJDBCCall.

Връзката, която използва SimpleJDBCCall, трябва да се използва за създаването на Clob.

Успях да реша подобен проблем чрез внедряване на SQLData и чрез извличане на текущата връзка:

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. Как да продължа цикъла while след изключение, повдигнато в SQL

  2. Създайте Apex формуляр с множество страници

  3. Премахнете числата, намерени в колоната с низове

  4. ORA-01027:обвързващи променливи не са разрешени за дефиниране на данни, когато се опитвате да използвате if elseif

  5. Тип данни Oracle Date, трансформиран в 'YYYY-MM-DD HH24:MI:SS TMZ' чрез SQL