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?