Utilizar una clase Java en Oracle 10g
Posted by mike on Enero 12th, 2010Existen 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












Recent Comments