Alejandría - La Biblioteca¿Quieres un blog como este?. Date de alta aquí.
Volver a la portada
Portada
Lista completa del contenido
Búsqueda
Enviar un e-mail al buzón de sugerencias.
Consúltenos
 Portada 
 Filosofía / Ensayos 
 Aventuras 
 Ciencia Ficción 
 Técnicos 
 Infantil 
 Esotérico 
 Poesía 
 » Técnicos 
Volver al principal : SQL y PL/SQLSiguiente: Escribiendo consultas

Tipos de datos

La idea fundamental en esta sección es indicar la forma de escribir declaraciones correctas en SQL, familiarizarse con los objetos de base de datos.

Una regla general es que cuando se escriben declaraciones en SQL no pueden mezclarse tipos de datos. Para ello existen utilitarios que convierten de un tipo a otro, las cuales se cubren más adelante.

Números

El tipo de datos NUMBER es utilizado para guardar los números cero, negativos, positivos, fijos y de punto flotante, con hasta 38 dígitos de precisión. Los números van desde del 1.0x10 -130 hasta 1.0x10 126.

Los NUMBER pueden ser definidos de tres formas:

NUMBER(p,s)

Donde p es la precisión de hasta 38 dígitos y s es la escala (número de dígitos a la derecha del punto decimal).

NUMBER (p)
Es este un número de punto fijo con una escala de cero y precisión de p.

NUMBER

Este es un número punto flotante con una precisión de 38. La siguiente tabla muestra como Oracle almacena las diferentes escalas y precisiones:


Dato actualDefinido comoAlmacenado como
7,456,123.89 NUMBER 7456123.89
7,456,123.89 NUMBER(*,1) 7456123.9
7,456,123.89 NUMBER(9) 7456124
7,456,123.89 NUMBER(9,2) 7456123.89
7,456,123.89 NUMBER(9,1) 7456123.9
7,456,123.89 NUMBER(6) (no aceptado, excede la precisión)
7,456,123.89 NUMBER(7,-2) 7456100

Fechas

Antes de almacenar la fecha y hora como información en un formato carácter o decimal, IBM creó un tipo de datos separado. Para cada tipo de datos DATE se almacena la siguiente información:

?? Siglo (Century )

?? Año (Year)

?? Mes (Month)

?? Día (Day)

?? Hora (Hour)

?? Minuto (Minute)

?? Segundo (Second)

Se puede obtener fácilmente la fecha y hora actual utilizando la función SYSDATE.
La aritmética de fechas hace posible utilizar constantes numéricas u otras fechas. Sólo se puede utilizar la adición y substracción. Por ejemplo, SYSDATE + 7 retornará la fecha de hoy en una semana.
Cada sistema de bases de datos tiene su propio valor por defecto para el formato de la fecha, y está definido en el parámetro de inicialización NLS_DATE_FORMAT. Este usualmente tiene el valor DD-MON-YY, donde DD es el día del mes, MON es la abreviación del nombre del mes, y YY es la designación en dos dígitos del año.
En caso de no especificar la hora, esta será por defecto 12:00:00 a.m. Si solo se captura el componente de la hora, el defecto para la fecha será el primer día del mes actual.

Caracteres

Existen cuatro tipos de datos para caracteres:

El tipo de datos CHAR es utilizado como un campo de largo fijo. El tamaño puede ser especificado entre 1 y 255 caracteres en versión 7 y entre 1 y 2000 en versión 8. El tamaño por defecto es 1. Cuando no se indica dato de entrada, se llena con tantos espacios en blanco como sea necesario para llegar al tamaño especificado.

El VARCHAR2 es utilizado para campos de largo variable. Debe indicarse para este tipo de datos el tamaño al utilizar el tipo de datos. El largo máximo es de 2000 caracteres en versión 7 y 4000 en versión 8.
El tipo de datos LONG es utilizado para cantidades variables de texto muy grandes. Cualquier largo hasta 2 GB puede indicarse. Algunas restricciones para el uso de este tipo de datos son:

?? Sólo puede haber una columna de este tipo por tabla.
?? Una columna LONG no puede ser indexada.
?? Una columna LONG no puede ser pasada como parámetro de un procedimiento o función.
?? Una función no puede ser utilizada para retornar un valor de tipo LONG.
?? Una columna de tipo LONG no puede ser utilizada en el where, order by, group by o connect de una sentencia SQL.

El tipo de datos VARCHAR es sinónimo de VARCHAR2. Oracle Corporation está reservando este para uso futuro. No usarlo.
Los tipos de datos NCHAR y NVARCHAR2 (solo versión 8) permiten almacenar caracteres del NLS. NCHAR guarda hileras de caracteres de largo fijo que corresponden a un conjunto de caracteres de largo fijo o variable. El NVARCHAR2 guarda hileras de largo variable.
Cuando se utilizan estos tipos NCHAR o NVARCHAR2, se debe especifica el tamaño máximo que puede el número de caracteres (para conjuntos de caracteres de largo fijo) o el número de bytes (para un conjunto de caracteres de largo variable).

?? El largo máximo para las columnas NCHAR es de 2000 bytes, o bien el número de máximo de caracteres que pueden ser grabados en 2000 bytes.
?? El largo máximo para las columnas NVARCHAR2 es de 4000 bytes, o bien el número de máximo de caracteres que pueden ser grabados en 4000 bytes.


Binario

Dos tipos de datos existen son el RAW y LONGRAW, disponibles para almacenar datos de tipo binario, como puede ser sonido digital e imágenes. Conllevan características similares a los tipos VARCHAR2 y LONG, ya mencionados.
El uso del tipo de datos RAW puede almacenar hasta 2000 caracteres de datos y el tipo de datos LONGRAW soporta hasta 2 GB.
Solo almacenan datos binarios; no soporta manipulación de hileras. Los valores son obtenidos como caracteres hexadecimales.
En versión 8 se cuenta con los tipos de datos LOB (BLOB, CLOB, NCLOB, y BFILE) que dan la posibilidad de guardar información hasta 4 GB, además de soportar acceso secuencial.

Otros

Cada fila en la base de datos tiene una dirección. Esta dirección puede ser obtenida por medio de la función ROWID. El formato es el siguiente (versión 7):

BLOCK.ROW.FILE

BLOCK es el bloque de datos de archivo de datos FILE conteniendo el ROW. Estos datos se dan en formato hexadecimal y el tipo de datos es ROWID.
Este valor no puede ser exportado, pues al importarse la dirección del registro es casi seguro que variará.
El ROWID extendido (versión 8) tiene el siguiente formato:

OOOOOOFFFBBBBBBRRR

Donde:
OOOOOO es el número de objeto de datos que identifica el segmento de la base de datos. Objetos que se encuentren en un mismo segmento, como un cluster de tablas, tiene el mismo número de objeto de datos.
FFF es el datafile que contiene la fila.
BBBBBB este el bloque de datos que contiene la fila y son relativos al datafile (no al tablespace)
RRR la fila en el bloque.
Finalmente el MLSLABEL es un tipo de datos utilizado para almacenar el formato binario de etiquetas (labels), utilizado en sistemas operativos seguros.

Tipos Definidos por el Usuario

Además de los tipos vistos (built-in datatypes), Oracle permite definir nuevos tipos de datos a los usuarios.
Basado en el concepto de objeto, permite crear tipos como objetos del mundo real, los cuales tiene tres componentes básicos:

?? Un nombre, el cual lo identifica de forma única en un esquema.
?? Atributos, los cuales pueden ser de tipo predefinidos u otros tipos definidos por el usuario.
?? Métodos, los cuales son funciones o procedimientos escritos en PL/SQL y almacenados en la base de datos, o bien escritos en C o Java y almacenados externamente.

Para poder distinguir un objeto de otro dentro de la base de datos se define el object identifier (OID), para poder representar estas identificaciones existe el tipo REF, el cual es el contenedor de un identificador de objeto, el cual es básicamente un puntero a un objeto.
Otros tipos de datos son los VARRAY, los cuales permiten definir tablas del tipo de datos seleccionado.

Valores nulos

En el caso de Oracle se hace un manejo especial de los valores nulos, así por ejemplo cuando se comparan dos campos que son nulos el resultado es falso, cuando en primera instancia pareciera que debiera ser verdadero.
Sin embargo, esto encuentra razón en el hecho de que el valor no ha sido definido y por tanto no hay certeza de su contenido (de hecho no existe), para ello como un campo que está nulo no puede ser comparado con nulo, se utiliza la expresión campo IS NULL que retornará verdadero si el campo no ha sido asignado valor alguno o falso en caso contrario.

Este mismo NULL puede ser asignado a un campo.

Redacción

Volver al principal : SQL y PL/SQLSiguiente: Escribiendo consultas
© 2008Powered by NIDAVAL