Tipos de datos en Oracle

Los tipos de datos soportados por Oracle se agrupan en los siguientes conjuntos.
Alfanuméricos      Numéricos       Fecha     Binarios               Otros
CHAR                 NUMBER         DATE      RAW                   ROWID
VARCHAR2         FLOAT                           LONGRAW 
VARCHAR                                                BLOB 
NCHAR                                                     CLOB
NVARCHAR2                                            NLOB
LONG (Obs.)                                             BFILE

Los valores alfanuméricos van encerrados entre comilla simple: 'Alfanumérico' Los valores numéricos son número simples: 123 Las fechas van encerradas entre comillas simples: '11/11/2011' Los valores binarios no pueden ser representados (son fotos, vídeos)

Tipo de dato CHAR(b)
Almacena cadenas de caracteres de longitud fija, desde 1 a 2.000 bytes de ocupación. El número de caracteres que se pueden almacenar se rige según la siguiente fórmula.
nº caracteres = bytes / character set
Para ASCII, el conjunto de caracteres ocupa un byte, por lo que coincide el número de caracteres máximos con la ocupación del tipo de dato. Si se introduce un valor de 10 caracteres en un campo de CHAR(100), se tendrá que rellenar con 90 posiciones restantes.
Así la siguiente expresión es cierta: 'Hola Andrea' = 'Hola Andrea '
Si se intenta introducir un valor demasiado grande para el campo, se intentará eliminar los espacios finales, y si cabe sin espacios, se introduce. Si aún así no cabe, se retorna un error.

Tipo de dato VARCHAR2(b)
Almacena cadenas de caracteres de longitud variable. Si se define una columna de longitud 100 bytes, y se introduce en ella un valor de 10 bytes, la columna ocupará 10 y no 100 como hacía con el tipo de dato CHAR.

Tipo de dato VARCHAR(b)
En Oracle es equivalente a VARCHAR2, en futuras versiones permitirá distintos criterios de comparación.

Tipo de dato NCHAR(b)
Almacena un valor alfanumérico de longitud fija con posibilidad de cambio de juego de caracteres. Puede almacenar tanto caracteres ASCII, EBCDIC, UNICODE.

Tipo de dato NVARCHAR2(b)
Almacena un valor alfanumérico de longitud variable con posibilidad de cambio de juego de caracteres. Puede almacenar tanto caracteres ASCII, EBCDIC, UNICODE.

Tipo de dato NUMBER(p,s)
Almacena valores numéricos en punto flotante que pueden ir desde 1.0 x 10-130 hasta 9.9…(38 nueves)… 9 x 10125 . El almacenamiento interno de los valores numéricos en notación científica:
Mantisa x 10exponente
La mantisa puede contener cualquier número, entero o decimal, positivo o negativo. El exponente podrá contener cualquier número entero, positivo o negativo. El parámetro p indica la precisión (número de dígitos contando los decimales) que contendrá el número como máximo. Oracle garantiza los datos con precisiones de 1 a 38. El parámetro s indica la escala, esto es, el máximo de dígitos decimales. Hay que tener en cuenta que una columna definida NUMBER(10,5), podrá contener como máximo cualquier número siempre y cuando el número de dígitos enteros más el número de dígitos decimales no supere 10 (y no 15). La escala puede ir de -84 a 127. Para definir número enteros, se puede omitir el parámetro s o bien poner un 0 en su lugar. Se puede especificar una escala negativa, esto lo que hace es redondear el número indicado a las posiciones indicadas en la escala. Por ejemplo un número definido como NUMBER(5,-2), redondeará siempre a centenas. Así si intentamos introducir el valor 1355, en realidad se almacenará 1400.

Tipo de dato FLOAT(b)
Almacena un número en punto decimal sin restricción de dígitos decimales.
El parámetro b indica la precisión binaria máxima que puede moverse en el rango 1 a 126. Si se omite el defecto será 126. Una columna FLOAT(126) es equivalente a una columna NUMBER(38), aunque la diferencia está en que la columna NUMBER no podrá contener decimales y la columna FLOAT si y con cualquier escala.

Tipo de dato DATE
Almacena un valor de fecha y hora.
Para un tipo de dato DATE, Oracle almacena internamente los siguiente datos:
  • Siglo
  • Año
  • Mes
  • Día
  • Hora
  • Minuto
  • Segundo
El formato por defecto de las fechas es: 'DD-MON-YYYY' Esto es:
Dos dígitos para el día Las tres primeras siglas del mes (depende del idioma instalado). Cuatro dígitos para el año.
Por ejemplo:
'11-NOV-2011' '12-APR-1999'
Este formato puede ser alterado en cualquier momento.
Internamente una fecha se almacena como el número de días desde cierto punto de inicio (por ejemplo el año 0).
Esto permite que las fechas puedan ser tratadas en operaciones aritméticas normales:
  • '11-NOV-2011' + 10 = '21-NOV-2011'
  • '12-APR-1999' - 1 = '11-APR-1999'
  • '24-APR-1992' - '1-APR-1992' = 23
Tipos de datos binarios
Permiten almacenar información en formato “crudo”, valores binarios tal y como se almacenan en el disco duro o como residen en memoria. Estas columnas se pueden utilizar tanto para almacenar grandes cantidades de datos (hasta 4Gb.), como para almacenar directamente cualquier tipo de fichero (ejecutables, sonidos, vídeos, fotos, documentos Word, DLLs…) o para transportar datos de una base de datos a otra, ya que el formato binario es el único formato común entre cualquier sistema informático.

Tipo de dato LONG (Obsoleto)
Almacena caracteres de longitud variable hasta 2 Gb. Este tipo de dato se soporta para compatibilidad con versiones anteriores. En Oracle y siguientes versiones se debe usar los tipos de datos CLOB y NLOB para almacenar grandes cantidades de datos alfanuméricos.

Tipo de dato ROWID
Representa una dirección de la base de datos, ocupada por una única fila. El ROWID de una fila es un identificador único para una fila dentro de una base de datos. No hay dos filas con el mismo ROWID. Este tipo de dato sirve para guardar punteros a filas concretas.

Referencias:
  • http://www.tuinformaticafacil.com/oracle-11g/tipos-de-datos-en-oracle-11g
  • http://www.techonthenet.com/oracle/datatypes.php

4 comentarios:

  1. Muy buena la explicación, pero tengo una pregunta con respecto a los tipos de datos number(p,s) y es la siguiente si la precisión es el numero de dígitos contando los decimales como es que la escala puede tener de -84 a 127. se que es así
    porque tal cual como tu lo explicaste lo explican los libros y la guía de oracle, pero no me queda claro..

    ResponderEliminar
  2. Estimado, vamos a tomar como referencia este artículo en: http://aprendooracle12c.blogspot.com/

    ResponderEliminar
  3. Estimados un cordial saludo con el permiso de ustedes tomo su articulo para poder explicar en clase los tipos de datos en oracle me pareció muy interesante y esta muy bien resumido les agradezco mucho por su aporte

    ResponderEliminar