Provávelmente, eu nunca vi gambiarra tão grande. E o pior, sendo reconhecida pela própria Oracle que desenvolveu estas classes de comunicação com o banco...
http://download-east.oracle.com/docs/cd/A81042_01/DOC/java.816/a81354/samapp4.htm#1011963
Problema: Passar arrays (de Strings ou tipos primitivos, nada de tipos complexos) para functions ou procedures. Solução da Oracle: Criar types no banco de dados e referenciá-los conforme abaixo:CallableStatement pstmt = conn.prepareCall("begin ? := pkg_site_cvc_compra.fun_teste_array(?); end;");
pstmt.registerOutParameter(1, OracleTypes.INTEGER);
//
String arrayElements[] = { "Test3", "Test4" };
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("VAR_ARRAY", conn);
ARRAY newArray = new ARRAY(desc, conn, arrayElements);
pstmt.setArray(2, newArray);
pstmt.execute();
Object retorno = pstmt.getObject(1);
log.info(retorno);
Opinião:
Onde já se viu ter que criar type no banco de dados legado só para fazer funcionar uma chamada a procedure? Não é a toa que os leigos em Java depois falam mal... O certo é não MUDAR NADA no banco, quem tem que se adaptar e se virar é o driver jdbc, o qual na Oracle é um VERDADEIRO LIXO. :twisted: