Retornando um Array do Java para uma procedure Oracle
Dúvida de vários desenvolvedores Oracle, você vai aprender a ir retornando um Array do Java para uma procedure Oracle de maneira simples e direta.
[ad#texto]
Em vários casos é necessário que uma classe Java retorne um array para uma procedure Oracle, mas isso não é tão simples, pois na documentação somente tipos simples, como por exemplo, uma string, mas segue aqui uma solução. Com ela retornando um array do Java para uma procedure Oracle será bem mais simples realizar suas trocas Java entre Oracle.

Vamos então compor o cenário do nosso exemplo: como o Oracle não tem a capacidade de receber um path qualquer e listar todos os arquivos contidos, vamos então montar uma classe Java que irá receber o path e retornar um array contendo todos os arquivos contidos na pasta.
Este é um problema que atinge vários desenvolvedores Oracle, que em boa parte das vezes não tem conhecimento de Java e ficam ilhados para construir uma simples listagem de arquivos.
Retornando um Array do Java para uma procedure Oracle: nosso código
Criar um Oracle Type como abaixo:
CREATE OR REPLACE TYPE SimpleStringArrayType AS TABLE OF VARCHAR2(500)
Criar uma classe Java simples que irá listar os arquivos e retornar um Array de Strings:
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "ObtainStringArrayFromJava" AS
import java.io.*;
import java.sql.*;
import java.math.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
public class ObtainStringArrayFromJava {
public static void returnStringArray(oracle.sql.ARRAY[] vReturnArray) throws
java.sql.SQLException, IOException {
int arrayLength = 10;
String[] vTestArray = new String[arrayLength];
for (int i=0; i<arrayLength; i++) {
vTestArray[i] = "Java Entry " + (i+1);
}
Connection conn = new OracleDriver().defaultConnection();
ArrayDescriptor desc = ArrayDescriptor.createDescriptor("SIMPLESTRINGARRA YTYPE",conn);
vReturnArray[0] = new ARRAY(desc,conn,vTestArray);
}
}
Agora vamos criar a procedure Oracle que irá consumir a classe Java e receber o array de Strings:
PROCEDURE ObtainStringArrayFromJava(vReturnArray OUT SimpleStringArrayType) AS
LANGUAGE JAVA NAME 'ObtainStringArrayFromJava.returnStringArray(oracl e.sql.ARRAY[])';
Logicamente a procedure deverá ser pública, monte um script de teste conforme abaixo:
SET serveroutput ON SIZE 2000
DECLARE
vArray SimpleStringArrayType := SimpleStringArrayType();
BEGIN
JavaTestPackage.ObtainStringArrayFromJava(vArray);
DBMS_OUTPUT.PUT_LINE(CHR(09));
DBMS_OUTPUT.PUT_LINE('Teste obtendo Array Java.');
DBMS_OUTPUT.PUT_LINE(CHR(09));
FOR i IN 1..vArray.COUNT LOOP
DBMS_OUTPUT.PUT_LINE('PL/SQL ' || i || ' -- Valor: "' || vArray(i) || '".');
END LOOP;
END;
E pronto!
O funcionamento é simples, fica fácil entender.