Oracle Stored procedures x Array x JDBC: gambiarra brava

1 resposta
Sparcx86

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);
Em que VAR_ARRAY é o tipo criado no banco.

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:

1 Resposta

F

Alguém sabe de alguma gambiarra dessa ou não para tipo table na entrada?

Essa table tiver um tipo record?

Desde já agradeço muitíssimo!!!

Criado 5 de fevereiro de 2007
Ultima resposta 23 de jan. de 2009
Respostas 1
Participantes 2