Создать CLOB из длинной строки с помощью JDBC

У меня следующий запрос:

select id from table1 where some_func(?) = 1;

где some_func - функция, которая позволяет своим аргументам быть либо VARCHAR2, либо CLOB, и ? - это некоторая строка, которая может быть очень длинной.

Я пытаюсь использовать следующий код для привязки переменных:

stmt.setObject(i+1, obj);

, но в случае string.length () > 4000 я получаю следующая ошибка:

java.sql.SQLException: ORA-01460: unimplemented or unreasonable conversion requested

по очевидной причине: ограничение размера VARCHAR2 составляет 4000 символов.

Затем я попытался использовать следующий код:

if(obj instanceof String && ((String) obj).length() >= 4000) {
  String s = (String) obj;
  StringReader stringReader = new StringReader(s);
  stmt.setClob(i+1, stringReader, s.length());
} else {
  stmt.setObject(i+1, obj);
}

, который дал другую ошибку:

ORA-22922: nonexistent LOB value

Последняя идея, которую я пробовал, заключалась в создании CLOB с помощью метода oracle.sql.CLOB.createTemporary () , но это не удалось из-за следующего исключения:

java.lang.ClassCastException:
  org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper 
  cannot be cast to oracle.jdbc.OracleConnection

Что я делаю не так? Есть ли другие возможности сделать это?

6
задан GreenhouseVeg 19 December 2018 в 13:01
поделиться