Hoy vamos a aprender cómo podemos cargar imágenes en una tabla en Oracle APEX, para luego presentarlas en un reporte o bien, en el componente display image de APEX.

Carga del documento/imagen:

Lo primero que debemos hacer es crear una tabla que tenga obligatoriamente los siguientes campos, estos son necesarios para poder almacenar cualquier imagen u archivo:

  • NOMBRE_IMAGEN – VARCHAR(255) : Guardará los bytes de la imagen
  • ARCHIVO_IMAGEN – BLOB : Indicará el nombre del documento que se carga
  • MIME_TYPE – VARCHAR(255) : Aquí se guardará el tipo del documento o imagen que se guarde
  • CHARSET – VARCHAR(255) : Este campo se indica en caso de que carguemos un documento con un tipo de charset especial
  • LAST_UPDATE – DATE : Indicará la fecha en que se cargó el documento

Luego de esto, debemos crear el formulario en donde cargaremos nuestra imagen, para ello en nuestro formulario vamos a elegir el componente File Browser de tal manera que, todos los campos creados serán de uso exclusivo de este componente.

Llenaremos el campo Setting con el nombre de las columnas respectivamente como en la siguiente imagen:

La columna a la cual apunta nuestro file browser es ARCHIVO_IMAGEN la cual es de tipo BLOB:

Guardamos los cambios y de esta forma podremos guardar cualquier documento en nuestra base de datos, ahora veremos como presentarlo.

Presentación:

Para la presentación, lo haremos por medio de un reporte interactivo, realizaremos la consulta PL / SQL con un detalle, ya que a la hora de llamar la columna de tipo BLOB debemos utilizar la función sys.dbms_lob.getlength para que nos devuelva los datos en un tamaño númerico, ya que de no aplicar esta función, el reporte nos saldría con un error:

sys.dbms_lob.getlength(Column)

Luego de tener el campo correctamente llamado, debemos seleccionarlo y en BLOB Attributes vamos a configurar los campos respectivos para mostrar la imagen:

Luego de esto, ya podemos guardar nuestro reporte y probar su ejecución:

Ahora bien, que sucede si queremos hacer esto mismo pero utilizando el componente Display Image de Oracle APEX?, se puede realizar, sin embargo debemos tener en cuenta que el componente utiliza código nativo PL/SQL por lo que no es dinámico, esto es un problema, ya que a la hora de querer cargar imágenes de forma dinámica, utilizando algun valor de un campo, no se puede llamar el valor del ítem usando :NOMBRE_CAMPO, por lo que mi recomendación es mostrarla usando alguna de estas opciones:

  1. Mostrar un reporte de solo el campo imagen, quitarle la decoración al reporte, padding, líneas, de tal manera que solo se vea la imagen que se necesite.
  2. Hacer un API que cargue mis imágenes de la tabla y luego vía consumo del API, cargarlas usando el componente Display Image

En caso de que necesite aprender a hacer un API que brinde las imágenes por medio de un URL, hice una entrada al blog que indica como realizarlo:

Nota: Debemos tener en cuenta que el uso de imágenes en Oracle APEX puede hacer que los tiempo de carga se alarguen, por lo que recomiendo que se aumente el parámetro de base de datos SHARED_SERVERS para que la base de datos pueda brindar una mayor velocidad en la respuesta de los datos.

Adicionalmente, es super recomendable utilizar imágenes con un peso menor a 100 kb.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *