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.

Retornando um Array do Java para uma procedure Oracle
Retornando um Array do Java para uma procedure 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.

Tags:, ,
matrix
matrix

Assinar blog por e-mail

Digite seu endereço de e-mail para assinar este blog e receber notificações de novas publicações por e-mail.

Junte-se a 321 outros assinantes

Busca

outubro 2020
DSTQQSS
 123
45678910
11121314151617
18192021222324
25262728293031

Categorias