Tipo de datos blob

Alcance

Lenguajes: .NET, C/SQL, Visual Basic, Java, Visual FoxPro.

DBMSs: Access, SqlServer, Oracle, DB2 iseries, DB2 UDB, Informix, PostgreSQL.

 

Introducción

Ante la creciente digitalización de imágenes, planillas, videos, asi como todo tipo de documentos, las aplicaciones requieren cada vez más organizar y mantener esta información que en muchos casos es crítica para la organización.

 

El tipo de datos Blob permite almacenar esta información en la propia base de datos, aprovechando así los diferentes mecanismos de integridad y control que proveen los DBMSs. Es decir, permite ver esta información como un dato más a manejar.

 

Descripción

Los atributos de tipo Blob permiten almacenar información de tipo binario en la base de datos.

 

Para actualizarlos, se deberá asignarles un string indicando donde esta ubicado el archivo que se desea almacenar. Al insertar o actualizar el registro, se transfiere el contenido de dicho archivo a la base de datos.

 

Por ej.si se agrega el registro en un procedimiento:

 

New

AttCode = 1

AttBlob = 'C:\images\Photo.jpg'

Endnew

 

Esto hace que la imagen Photo.jpg ubicada en c:\images se almacene en el registro 1.

 

Si por el contrario la actualización se realiza en una transacción, se digita en el atributo Blob el camino al archivo.

 

A la inversa, cuando se hace referencia a atributos de tipo Blob, la información de la base de datos se almacena en archivos temporales en disco, cuyo camino y nombre completo se devuelve a los atributos.

 

Luego, al hacer referencia al atributo Blob (por ejemplo, en un comando For each), se graba el contenido en la base de datos en un archivo, cuyo nombre se genera automáticamente, y es el contenido del atributo. Por ejemplo:

 

For each

where AttCode = 1

&Path = AttBlob

Endfor

 

La variable &Path (de tipo Char) contendrá el camino completo al archivo generado automáticamente con el contenido almacenado en la base de datos.

 

Ubicación de los archivos temporales

Para indicar la ubicación donde se graban los archivos temporales, existe una propiedad de modelo Blob local storage path, ubicada bajo la sección Client Server Information.

 

Si la propiedad no esta configurada, los archivos quedarán en el directorio indicado en la variable de ambiente TMP del sistema operativo. Si TMP no existe, se toma en cuenta la variable TEMP. Si TEMP no existe, los archivos quedan en el directorio corriente (esto funciona para todos los generadores menos para Java, en el cual si no esta configurada la propiedad, los archivos quedan en el directorio corriente).

 

El directorio corriente puede variar según el ambiente. En el caso de ambiente Win este directorio es el mismo directorio de la aplicación. En el caso de ambiente Web este directorio puede variar según el generador y la configuración (por ej.utilizando el generador C/SQL se grabarán en el directorio físico asociado al directorio virtual, en el caso de Java será en el directorio corriente del servidor de servlets utilizado, etc).

 

NOTA:  En el caso de reorganizaciones en las que se crean tablas temporales tener en cuenta que, si se tiene configurada la propiedad, será necesario que apunte a un directorio válido para el equipo en el que se vaya a ejecutar la reorganización. Considerar ademas que en el caso de ambiente Web el directorio debe ser válido para el web server.

 

Extensión de los archivos temporales

El archivo temporal generado será grabado sin extensión. Es posible especificar una extensión para el mismo utilizando la propiedad del atributo Associated File Extension:

 

 

Los valores posibles para la propiedad son:

 

          Unknown (default)              - indica que los archivos temporales se generarán sin extensión

          <valor> (por ej. JPG)          - indica la extensión que tendrán los archivos

 

Consideraciones

·         Para los generadores con ODBC, en el caso de utilizar el AS/400 como DBMS es necesario tener instalado Client Access 5.1 o posterior en la maquina donde ejecutan los programas.

 

·         Los atributos de tipo Blob no serán tenidos en cuenta en el control que se realiza en el diálogo seudo-conversacional (ver Control de Concurrencia)

 

·         Para el generador Java, no esta implementado para el DBMS Oracle.

 

·         En el caso del generador C/SQL, solo esta implementado para el método de acceso ODBC.

 

Ejemplo

En GXOpen existe un ejemplo de uso, el que puede ser obtenido en http://www.gxopen.com/main/hproject.aspx?260