Inicio » Oracle » Java en DB » Java en las bases de datos

Java en las bases de datos

Últimamente me he encontrado con alguna base de datos que almacena código Java, la verdad es que no conocía mucho sobre este tema, así que aquí incluyo algunas cosillas básicas que me han servido para apañarme un poco

Ver las clases java de un usuario:

SELECT dbms_java.longname (object_name), object_type
FROM user_objects
WHERE object_type = 'JAVA CLASS'

Cómo ver el código Java almacenado en la base de datos

En todas las casos, name es nombre del objeto Java que queremos exportar, schema es el nombre de esquema propietario de objeto, en este caso si no pasamos ningún parametro lo busca en el esquema sobre el que estas.

Se tiene que exportar la clase en un campo BLOB y el código se almacena en UTF8.

Aquí pongo un ejemplo de un procedimiento que encontré por ahí para exportar el código fuente y lograr ver que contiene.

Existen tres tipos de objetos  class, source y resource en función de lo que queramos ver debemos utilizar uno de los siguientes procedimientos: dbms_java.export_class, dbms_java.EXPORT_RESOURCE, dbms_java.source

CREATE OR REPLACE PROCEDURE mostrar_fuente_java (
   NAME     IN   VARCHAR2,
   SCHEMA   IN   VARCHAR2 := NULL
)
/*
||  Overview: Shows Java source (prototype)
||
||  Author: Vadim Loevski
*/
IS
   b                      BLOB;
   v                      VARCHAR2 (2000);
   i                      INTEGER;
   object_not_available   EXCEPTION;
   PRAGMA EXCEPTION_INIT (object_not_available, -29532);

   PROCEDURE pl (
      str         IN   VARCHAR2,
      len         IN   INTEGER := 80,
      expand_in   IN   BOOLEAN := TRUE
   )
   IS
      v_len   PLS_INTEGER     := LEAST (len, 255);
      v_str   VARCHAR2 (2000);
   BEGIN
      IF LENGTH (str) > v_len
      THEN
         v_str := SUBSTR (str, 1, v_len);
         DBMS_OUTPUT.put_line (v_str);
         pl (SUBSTR (str, len + 1), v_len, expand_in);
      ELSE
         v_str := str;
         DBMS_OUTPUT.put_line (v_str);
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         IF expand_in
         THEN
            DBMS_OUTPUT.ENABLE (1000000);
            DBMS_OUTPUT.put_line (v_str);
         ELSE
            RAISE;
         END IF;
   END;
BEGIN
   /* Move the Java source code to a CLOB. */
   DBMS_LOB.createtemporary (b, FALSE );
   dbms_java.export_class (NAME, NVL (SCHEMA, USER), b);
   /* Read the CLOB to a VARCHAR2 variable and display it. */
   i := 1000;
   DBMS_LOB.READ (b, i, 1, v);
   pl (v);
EXCEPTION
   WHEN object_not_available
   THEN
      IF (SQLERRM) LIKE '%no such%object'
      THEN
         DBMS_OUTPUT.put_line ('Java object cannot be found.');
      END IF;
END;
/

Se puede ver el código de la siguiente manera, claro el  DBMS_OUTPUT tiene que estar activado

SQL> exec mostrar_fuente_java ('<nombre_fuente>')

Compilar una clase java almacenada en la base de datos:

 alter  java class "QualifyHost" resolve;

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s