Utilizar una clase Java en Oracle 10g

Existen dos formas de subir una clase Java a un esquema. La primer forma solo implica subir el archivo .Class y la segunda sube el archivo .Java


Clase Ejemplo

public class MiClaseOracle{

public static String mensaje() {

return “Mexico lindo y querido”;

}

public static void invierteNumeros(int[] primerNumero, int[] segundoNumero) {

int temporal = primerNumero[0];

primerNumero[0] = segundoNumero[0];

segundoNumero[0] = temporal;

}

}

Subir .Class

Primero se debe de revisar la versión del jdk con la que se compila y la versión del jdk que tiene la base de datos. El comando para revisar la versión es java -version. En caso de que se desee olvidar de esta ambigüedad se debe compilar utilizando el comando localizado en el directorio [ORAHOME]/db_1/jdk/bin/.

Una vez generado el archivo .Class se debe de ejecutar el siguiente comando en la linea de comandos: loadjava -user [usuario]/[contraseña]@[baseDatos] [NombreClase].class

Ejemplo

loadjava  –user  miusuario/mipwd@mibase   MiClaseOracle.class

Subir .Java

Obviamente en este caso se requiere tener el archivo .Java y ejecutar el siguiente comando en la línea de comandos: loadjava -user [usuario]/[contraseña]@[baseDatos] –resolve [NombreClase].java


Ejemplo

loadjava  –user  miusuario/mipwd@mibase -resolve MiClaseOracle.java

Después de haber ejecutado la anterior línea (ojo, no debe de mandar algún aviso la línea de comando) se debe de acceder a la base de datos (utilizando el mismo usuario con la que se ejecuto el comando anterior) y ejecutar el comando alter java class “[NombreClase]”  compile;


Ejemplo

alter java class ” MiClaseOracle”  compile;

Ejecución

Para poder consumir las funciones implementas en la clase MiClaseOracle se deben de crear en la base de datos una función y un procedimiento almacenado.

Función Mensaje


CREATE FUNCTION mensaje RETURN VARCHAR2

AS LANGUAGE JAVA

NAME ‘MiClaseOracle.mensaje() return java.lang.String’;

Procedimiento InvierteNumeros


CREATE PROCEDURE invierteNumeros

( primerNumero IN OUT NUMBER

, segundoNumero IN OUT NUMBER

) AS  LANGUAGE JAVA

NAME ‘MiClaseOracle.invierteNumeros(int[], int[])’;

Consumo

Para verificar la funcionalidad de lo que hemos venido haciendo es necesario escribir y ejecutar el siguiente PL

DECLARE

mensajerecibido VARCHAR2(200);

primerNumero NUMBER;

segundoNumero NUMBER;

BEGIN

primerNumero := 1;

segundoNumero := 9;

invierteNumeros(primerNumero,segundoNumero);

mensajerecibido := mensaje();

DBMS_OUTPUT.PUT_LINE(‘Primer = ‘ || primerNumero || ‘ — Segundo = ‘ || segundoNumero );

DBMS_OUTPUT.PUT_LINE(‘Mensaje = ‘ || mensajerecibido);

END;


Twiter @QBit_Mike

Analista/Desarrollador y cofundador de QBit Mexhico. Tecnologías utilizadas Android, Java (EJB, Servlets, Faces, Groovy & Grails, Maven, Swing), .Net (C#, VB, ASP, MVC), Delphi, Spring, Hibernate, DTSx, Oracle, T-SQL, Firebird, MySQL, MongoDB, NodeJs, ReactJs (Flux). Sistemas Operativos Mac, Ubuntu y Windows.

Twitter LinkedIn 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook0