viernes, 17 de febrero de 2012

Introducción SQL (Tipos de Datos)

Equivalentes ANSI SQL con el SQL de Oracle

Hay diferencias entre los tipos de datos del estándar ANSI con respecto al SQL de Oracle. Aunque Oracle es capaz de utilizar bases de datos con formato ANSI y tipos compatibles con el mismo, la equivalencia ANSI / Oracle la dicta esta tabla:
























Para los textos disponemos de los siguientes tipos:
  • VARCHAR2. Para textos de longitud variable de hasta 4000 caracteres
  •  CHAR. Para textos de longitud fija de hasta 2000 caracteres
  •  NCHAR. Para el almacenamiento de caracteres nacionales de texto fijo
  •  NVARCHAR2. Para el almacenamiento de caracteres nacionales de longitud variable
En todos estos tipos se indican los tamaños entre paréntesis tras el nombre del tipo. Ese tamaño en el caso de los tipos VARCHAR2 es obligatorio, en el caso de los tipos CHAR son opcionales (de no ponerlos se toma el uno).


Para tablas conviene poner suficiente espacio para almacenar los valores. En el caso de los VARCHAR, Oracle no malgasta espacio por poner más espacio del deseado ya que si el texto es más pequeño que el tamaño indicado, el resto del espacio se ocupa.

Tipo de datos number

El tipo NUMBER es un formato versátil que permite representar todo tipo de números. Su rango recoge números de entre 10-130 y 9,99999999999 * 10128. Fuera de estos rangos Oracle devuelve un error.

Los números decimales (números de coma fija) se indican con NUMBER(p,s), donde p es la precisión máxima y s es la escala (número de decimales a la derecha de la coma). Por ejemplo, NUMBER (8,3) indica que se representan números de ocho cifras de precisión y tres decimales. Los decimales en Oracle se presenta con el punto y no con la coma.

Para números enteros se indica NUMBER(p) donde p es el número de dígitos. Eso es equivalente a NUMBER(p,0). Para números de coma flotante (equivalentes a los flota o double de muchos lenguajes de programación) simplemente se indica el texto NUMBER sin precisión ni escala.
Precisión y escala


La cuestión de la precisión y la escala es compleja. Para entenderla mejor, se muestran estos ejemplos:









En definitiva, la precisión debe incluir todos los dígitos del número (puede llegar hasta 38 dígitos). La escala sólo indica los decimales que se respetarán del número, pero si es negativa indica ceros a la izquierda del decimal.

Tipo LONG 

Se trata de un tipo de datos que actualmente se mantiene por compatibilidad. Se recomienda encarecidamente utilizar en su lugar el tipo CLOB (que se comentará más adelante). En cualquier caso este tipo permite almacenar textos de hasta 2 GB de tamaño. Pero no puede formar clave, ni índice, ni ser parte de la cláusula WHERE, ni GROUP BY, ni SELECT con DISTINCT, ni pueden ser UNIQUE y sólo puede haber un campo de este tipo en una misma tabla entre otras limitaciones.

Fechas y Horas


DATE

El tipo DATE permite almacenar fechas. Las fechas se pueden escribir en formato día, mes y año entre comillas. El separador puede ser una barra de dividir, un guión y casi cualquier símbolo. Para almacenar la fecha actual basta con utilizar la función SYSDATE que devuelve esa fecha.

TIMESTAMP
Es una extensión del anterior, almacena valores de día, mes y año, junto con hora, minuto y segundos (incluso con decimales). Con lo que representa un instante concreto en el tiempo. Un ejemplo de TIMESTAMP sería ‘2/2/2004 18:34:23,34521’. En este caso si el formato de fecha y hora del sistema está pensado para el idioma español, el separador decimal será la coma (y no el punto).


INTERVALOS
Hay unos cuantos tipos de datos en Oracle que sirven para almacenar intervalos de tiempo (no fechas, sino una suma de elementos de tiempo).


INTERVAL YEAR TO MONTH
Este tipo de datos almacena años y meses. Tras la palabra YEAR se puede indicar la precisión de los años (cifras del año), por defecto es de dos. Ejemplo:

CREATE TABLE tiempos (meses INTERVAL YEAR(3) TO MONTH);
INSERT INTO tiempos VALUES(’3-2’);


En el ejemplo se inserta un registro que representa 3 años y dos meses.


INTERVAL DAY TO SECOND
Representa intervalos de tiempo que expresan días, horas, minutos y segundos. Se puede indicar la precisión tras el texto DAY y el número de decimales de los segundos tras el texto SECOND. Ejemplo:

CREATE TABLE tiempos (dias INTERVAL DAY(3) TO SECOND(0));
INSERT INTO tiempos VALUES(’2 7:12:23’);


RAW
Sirve para almacenar valores binarios de hasta 2000 bytes (se puede especificar el tamaño máximo entre paréntesis). El valor LONG RAW almacena hasta 2GB.

LOB
Son varios tipos de datos que permiten almacenar valores muy grandes. Más adelante se comentan en su totalidad. Incluye a BLOB, CLOB, NCLOB y BFILE.

ROWID
Valor hexadecimal que representa la dirección única de una fila en su tabla.


No hay comentarios:

Publicar un comentario