Crie CLOB a partir de uma sequência longa usando JDBC

Eu tenho a seguinte consulta:

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

Ondesome_func é uma função que permite que seus argumentos sejam VARCHAR2 ou CLOB e? é alguma corda, que pode ser muito longa.

Estou tentando usar o seguinte código para vincular variáveis:

stmt.setObject(i+1, obj);

mas no caso destring.length() > 4000, recebo o seguinte erro:

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

por uma razão óbvia: o limite de tamanho do VARCHAR2 é de 4000 caracteres.

Eu tentei usar o seguinte código:

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

que deu um erro diferente:

ORA-22922: nonexistent LOB value

A última idéia que tentei foi criar um CLOB usandooracle.sql.CLOB.createTemporary() método, mas falhou devido à seguinte exceção:

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

O que estou fazendo errado? Existem outras possibilidades para fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion