Posts Tagged Oracle

Acessando Classes Java de Dentro do Oracle

Entao, ta ai um negócio meio esquisito, mas recentemente um colega meu precisou fazer tal proesa para utilizar os serviços de nota fiscal eletrônica de dentro do banco.

Os recursos disponíveis na jdk do banco são meio escassos, pois sua jdk não é totalmente compatível com as jdks da sun, mas existem boa parte das classes e métodos disponíveis da jdk 1.4, e também é possível incluir no classpath do banco arquivos .jar.

Bom o que vamos fazer aqui hoje é criar uma classe java, carregá-la no banco e após isso criar uma function que acessa os recursos desta classe, e tambem irei mostrar como se faz o upload de arquivos .jar no banco.

O ambiente utilizado é:

  • Oracle 11g

Primeiro vamos criar uma classe com nosso método, ele deve ser estático:


public class TesteOracle{

public static String metodo(String nome){
return "Olá :"+nome;
}
}

Após isto podemos compilar nossa classe, através do comando javac -target 1.4 -source 1.4 TesteOracle.java, é gerado entao o arquivo TesteOracle.class.

Quando é instalado o Oracle ele adiciona nas variaveis de ambiente do sistema operacional o diretio \bin do mesmo, dentro deste diretorio existe disponível a aplicação loadjava.bat(no caso de windows), para carregar nossa classe no banco, basta acessarmos o prompt e digitarmos: loadjava -user usuario/senha caminhoDoSeuArquivo .class.

Após feito isso, nossa classe ja estaria disponível no banco de dados:

Classe Carregada No Banco

A imagem acima mostra o objeto dentro do banco de dados, esta sendo utilizado a ferramente sqldeveloper 2.1 do oracle.

Agora, vamos criar nossa function:


create or replace
FUNCTION ACESANDOJAVA RETURN VARCHAR2 AS LANGUAGE JAVA
NAME 'TesteOracle.metodo() return java.lang.String';

Após criada nossa function podemos fazer um select nela e ver o resultado:

Resultado Final

A imagem acima mostra o resultado apos o select na function.

E é isso ai, abraço !

,

Nenhum comentário.

Mapeando Arrays de Objetos Oracle no Java

Fala pessoal,

Este tutorial explica como fazer binding de objetos/arrays de objetos java para objetos declarados em procedures no oracle.

Existe um ótimo artigo neste  link que explica como fazer estes mapeamentos, gostaria apenas de  complementar este artigo pois ele aborda como criar os objetos no oracle/java, como recuperar os arrays destes objetos, porem ficou faltando mostrar como passar os arrays como parametro para as procedures.

A única coisa que muda para passar um array como parâmetro é o seguinte


public static void proSelectClass2(TypeClass[] classQry, Connection conn) {
//vc tem que obter um OracleCallableStatement
OracleCallableStatement cs = null;
try {
conn.getTypeMap().put(TypeClass.ORACLE_CLASS_ARRAY_NAME, TypeClass[].class);
conn.getTypeMap().put(TypeUser.ORACLE_USER_ARRAY_NAME, TypeUser[].class);

//aqui obtém o OracleCallableStatement fazendo um cast
cs = (OracleCallableStatement) conn.prepareCall("{call PAC_BEAN.PRO_SELECT_CLASS2(?)}");
//Vc cria um array descriptor
ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(TypeClass.ORACLE_CLASS_ARRAY_NAME, conn);
//cria um array do oracle utilizando o arraydescriptor criado acima
oracle.sql.ARRAY array = new ARRAY(descriptor, conn, classQry);
//apos isto seta o array criado na posicao em que é passado o array na procedure, obs: este método setARRAY(maíusculo) só está disponível no OracleCallableStatement
cs.setARRAY(1, array);
//aqui esta registrando um array de saida, mas isso é igual ao tutorial passado no link
cs.registerOutParameter(1, OracleTypes.ARRAY, TypeClass.ORACLE_CLASS_ARRAY_NAME);
cs.execute();

É isso ai, qualquer dúvida podem entrar em contato comigo.

abraço.

,

Nenhum comentário.