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.

matrix

ViamaisBLOG
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.