Los localizadores de objetos grandes (LOB) le permiten hacer referencia a un LOB en instrucciones Transact-SQL en lugar de hacer referencia al propio LOB, ya que el tamaño de un texto puede ser de un solo texto o el LOB de una imagen puede tener muchos megabytes. El uso de un localizador de LOB en declaraciones Transact-SQL ayuda a reducir el tráfico de red entre el cliente y SAP ASE y también reduce la cantidad de memoria que necesitaría el cliente para procesar el LOB. SAP ASE o Sybase ASE ayudan a las aplicaciones cliente a enviar y recibir localizadores como variables de host y marcadores de parámetros.
Un localizador de LOB seguirá siendo válido mientras dure la transacción en la que se creó. SAP ASE realiza una validación que invalida el localizador cada vez que la transacción se confirma o se retrotrae.
Tipos de datos utilizados en los localizadores de LOB:
los localizadores de LOB utilizan tres tipos de datos diferentes:
- text_locator : para LOB de texto.
- unitext_locator : para LOB unitext.
- image_locator : para LOB de imágenes.
Declarar una variable local para el LOB Locator: se pueden declarar variables locales para los tipos de datos del localizador.
Por ejemplo:
declare @v1 text_locator
Debido a que los LOB y los localizadores se almacenan solo en la memoria, no puede usar tipos de datos de localizadores como tipos de datos de columna para tablas o vistas de usuario, o en restricciones o valores predeterminados.
Creación de un localizador de LOB: se puede crear un localizador de LOB de forma explícita o implícita.
En general, cuando se usa el localizador de LOB en una instrucción Transact-SQL, los localizadores se convierten implícitamente al LOB al que hacen referencia. Es decir, cada vez que se pasa un localizador de LOB a una función de Transact-SQL, la función opera en el LOB al que hace referencia el localizador.
Los cambios que realice en el LOB al que hace referencia el localizador no se reflejan en el LOB de origen en la base de datos, a menos que los guarde explícitamente. De manera similar, cualquier cambio que realice en el LOB almacenado en la base de datos no se reflejará en el LOB al que hace referencia el localizador.
Una instancia LOB tiene un localizador y un valor . El localizador de LOB hace referencia al lugar donde se almacena físicamente el valor de LOB. El valor LOB se denomina como los datos almacenados en el LOB.
Cada vez que usa un LOB en una operación, como pasar un LOB como parámetro, en realidad está pasando un localizador de LOB. En su mayor parte, puede trabajar con una instancia de LOB en su aplicación sin preocuparse por la semántica de los localizadores de LOB. No es necesario eliminar la referencia de los localizadores de LOB porque se requiere con punteros en algunos lenguajes de programación.
Todavía hay algunos problemas con respecto a la semántica de los localizadores LOB y cómo se almacenan los valores LOB que debe tener en cuenta.
LOB temporales
También puede crear LOB temporales, que son como variables locales, para facilitar el uso de LOB de base de datos. Los LOB temporales no están asociados a ninguna tabla, solo son accesibles por su creador, tienen localizadores (que es como se accede a ellos) y se eliminan cuando finaliza una sesión.
No hay soporte para BFILES temporales. Los LOB temporales solo pueden ser variables de entrada (valores IN) en las cláusulas WHERE de las declaraciones INSERT, UPDATE o DELETE. También se permiten como valores insertados por una instrucción INSERT o un valor en la cláusula SET de una instrucción UPDATE. Los LOB temporales no tienen soporte transaccional del servidor de la base de datos, lo que significa que no puede realizar COMMITS o ROLLBACK en ellos.
Los localizadores de LOB temporales pueden abarcar transacciones. También se eliminan cuando el servidor finaliza de forma anormal y cuando se devuelve un error de una operación SQL de la base de datos.
Localizadores de LOB en su aplicación
Para usar un localizador de LOB en la aplicación Pro*C/C++, debemos incluir el archivo de encabezado oci.h y declarar un puntero al tipo OCIBlobLocator para BLOB, OCIClobLocator para CLOB y NCLOB, u OCIBFileLocator para BFILE.
Para un NCLOB, puede
- Use la cláusula ‘CHARACTER SET IS NCHAR_CS’ en la declaración Pro*C/C++,
- O bien, ya debe haber utilizado una opción de precompilador NLS_CHAR en la línea de comandos o en un archivo de configuración para establecer la variable de entorno NLS_NCHAR.
Publicación traducida automáticamente
Artículo escrito por ShubhamMaurya3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA