23.11.09

Estrucutras de Oracle 10g(Types) accedidos desde java

Por esas casualidades de los proyectos me tocó participar en la definición y construcción de un componente que hiciera una consulta, mediante un procedimiento almacenado, a base de datos pero que sus atributos de entrada/salida son tipos definidos en la base de datos (Oracle 10g). Para ello tuve que investigar, leer y sufrir con las "famosas" clases que pertenecen al package oracle.sql (ArrayDescriptor, STRUCT, ARRAY, etc) y que permiten un "manejo" de estas estructuras en java. La realidad es que, después de mucho luchar, le tome el gustillo. El acceso, desde java, se realiza mediante Object lo que permite acceder con gran facilidad a los atributos y sólo preocuparse del tipo (que tiene en las tablas) para realizar el cast.

Aquí dejo parte del código para su revisión.

1. ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor(, );
2. ARRAY entrada = new ARRAY(descriptor, , null);
3. ARRAY salida = (ARRAY) (((weblogic.jdbc.wrapper.Array)cs.getArray(1)).unwrap(Class.forName("oracle.sql.ARRAY")));
4. Object[] nivel_1 = (Object[]) salida.getOracleArray();
5. Object[] nivel_2 = ((STRUCT) nivel_1 []).getAttributes();

  • Se obtiene el descriptor del tipo. (1)
  • Se crea la estructura del tipo de entrada. (2)
  • Se ingresan objetos de I/O del procedimiento almacenado.
  • Se ejecuta el procedimiento almacenado.
  • Se obtiene la salida desde el procedimiento almacenado. (3)
  • Se crea un arreglo de Object. (4)
  • Se recorre el arreglo preocupándose de "castear" al tipo correspondiente cada posición del arreglo.
  • En caso en que los objetos sean estructuras se debe "castear" a STRUCT. (5)
  • Se recorre el arreglo de Object.

Saludos.

No hay comentarios:

Publicar un comentario