Archive for category Oracle
Acessando Classes Java de Dentro do Oracle
Posted by Diego Ferreira da Silva in Oracle on 28 de março de 2010
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:
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:
A imagem acima mostra o resultado apos o select na function.
E é isso ai, abraço !
Mapeando Arrays de Objetos Oracle no Java
Posted by Diego Ferreira da Silva in Java, Oracle on 11 de janeiro de 2010
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.


