Objeto grande (LOB)
El término objeto grande y el acrónimo genérico LOB hace referencia al tipo de datos BLOB, CLOB o DBCLOB. En una base de datos Unicode, se puede utilizar NCLOB como sinónimo para DBCLOB.
Los valores LOB están sujetos a restricciones, como se describe en Series de caracteres de longitud variable. Estas restricciones se aplican incluso si el atributo de longitud de la serie LOB es de 254 bytes o menor.
Los valores LOB pueden ser muy grandes y la transferencia de dichos valores desde servidor de bases de datos a las variables del lenguaje principal del programa de aplicación cliente puede tardar mucho tiempo. Como normalmente los programas de aplicación procesan los valores LOB de fragmento en fragmento en lugar de como un todo, las aplicaciones pueden hacer referencia a un valor LOB utilizando un localizador de objeto grande.
Un localizador de objeto grande o localizador de LOB es una variable del lenguaje principal cuyo valor representa un solo valor LOB del servidor de bases de datos.
Un programa de aplicación puede seleccionar un valor LOB en un localizador de LOB. Entonces, utilizando el localizador de LOB, el programa de aplicación puede solicitar operaciones de base de datos basadas en el valor LOB (por ejemplo, aplicar las funciones escalares SUBSTR, CONCAT, VALUE o LENGTH, realizar una asignación, efectuar búsquedas en el LOB con LIKE o POSSTR o aplicar funciones definidas por el usuario sobre el LOB) proporcionando el valor del localizador como entrada. La salida resultante (los datos asignados a una variable del lenguaje principal cliente), sería normalmente un subconjunto pequeño del valor LOB de entrada.
SUBSTR( <lob 1> CONCAT <lob 2> CONCAT <lob 3>, <inicio>, <longitud> ) Cuando se selecciona un valor nulo en una variable del lenguaje principal normal,
la variable de indicador se establece en -1, lo que significa que el valor
es nulo. Sin embargo, en el caso de los localizadores de LOB, el significado de
las
variables de indicador es ligeramente distinto. Como una
variable del lenguaje principal del localizador en sí nunca puede ser nula,
un valor negativo de variable de indicador significa que el valor LOB
representado por el localizador de LOB es nulo. La información de nulo se mantiene local para el cliente en virtud del valor de la variable de indicador - el servidor no hace ningún seguimiento de los valores nulos con localizadores válidos.Es importante comprender que un localizador de LOB representa un valor, no una fila ni una ubicación en la base de datos. Cuando se ha seleccionado un valor en un localizador, no hay ninguna operación que se pueda efectuar en la fila o tabla originales que afecte al valor al que hace referencia el localizador. El valor asociado con un localizador es válido hasta que finaliza la transacción o hasta que el localizador se libera explícitamente, lo primero que se produzca. Los localizadores no fuerzan copias adicionales de los datos para proporcionar esta función. En su lugar, el mecanismo del localizador almacena una descripción del valor LOB base. La materialización del valor LOB (o expresión, tal como se mostraba anteriormente) se difiere hasta que se asigna realmente a alguna ubicación (un almacenamiento intermedio de usuario en forma de una variable del lenguaje principal u otro registro de la base de datos).
Un localizador de LOB es sólo un mecanismo utilizado para hacer referencia a un valor LOB durante una transacción; no persiste más allá de la transacción en la que se ha creado. No es un tipo de base de datos; nunca se almacena en la base de datos y, como resultado, no puede participar en vistas ni en restricciones de comprobación. Sin embargo, como un localizador de LOB es una representación cliente de un tipo LOB, hay SQLTYPE para localizadores de LOB para que puedan describirse dentro de una estructura SQLDA que se utiliza por sentencias FETCH, OPEN y EXECUTE.