Bienvenida al artículo sobre los tipos de datos nativos en la base de datos de Oracle
En este artículo se exploran en profundidad los Tipos de Datos Integrados de Oracle, con un enfoque en la versión 19c. Se ofrece una visión general esencial sobre cómo Oracle gestiona y clasifica los datos.
Cada valor dentro de la base de datos de Oracle está asociado a un tipo de datos específico, que define sus propiedades y comportamiento. Esta distinción es crucial, ya que afecta cómo se tratan y manipulan los valores en la base de datos. Por ejemplo, al crear una tabla, es fundamental especificar el tipo de datos para cada columna, y lo mismo ocurre al definir funciones o procedimientos almacenados para sus argumentos.
Este artículo guía a través de los diversos tipos de datos predefinidos que ofrece Oracle, ilustrando sus características principales y aplicaciones. Se descubre cómo cada tipo de datos puede influir en el diseño y la eficacia de las estructuras de la base de datos.
Se invita a leer este análisis para obtener una comprensión clara y completa de estos elementos fundamentales y descubrir cómo aprovecharlos al máximo en las operaciones diarias con la base de datos de Oracle. ¡Buena lectura!
Los 7 tipos de datos principales
Cada valor manipulado por la base de datos de Oracle tiene un tipo de datos. El tipo de datos de un valor asocia un conjunto fijo de propiedades al valor. Estas propiedades hacen que Oracle trate los valores de un tipo de datos de manera diferente a los de otro.
Al crear una tabla, es necesario especificar un tipo de datos para cada una de sus columnas. Al crear una función o un procedimiento almacenado, se debe especificar un tipo de datos para cada uno de sus argumentos. Estos tipos de datos definen el dominio de valores que cada columna puede contener o cada argumento puede tener.
En este artículo se hablará de los datos nativos en la base de datos de Oracle, es decir, los Tipos de Datos Integrados de Oracle, con referencia a la versión 19c.
Los datos se agrupan en 7 categorías principales:
- Tipo de datos de caracteres
- Tipo de datos LONG
- Tipo de datos numéricos
- Tipos de datos RAW y LONG RAW
- Tipo de datos extendido
- Tipo de datos de objeto grande (LOB)
- Tipos de datos de fecha y hora e intervalo
A continuación, se examina cada formato en detalle.
#1. Tipo de datos de caracteres
Este tipo de datos es conocido por almacenar datos de caracteres (alfanuméricos), es decir, palabras y texto en formato libre, en el conjunto de caracteres nacional o en el conjunto de caracteres de la base de datos. No son tan restrictivos como otros tipos de datos y, por lo tanto, tienen menos propiedades.
- CHAR: Especifica una cadena de caracteres de longitud fija en el conjunto de caracteres de la base de datos. Oracle asegura que todos los valores almacenados en una columna CHAR tengan la longitud especificada por la semántica de longitud establecida. Si se inserta un valor más corto que la longitud de la columna, Oracle lo rellena con espacios en blanco según la longitud de la columna. Si se intenta insertar un valor demasiado largo, Oracle devuelve un error.
- VARCHAR2: Es un tipo de datos alfanumérico de longitud variable que puede almacenar hasta 4000 caracteres. Si se supera el límite declarado, Oracle devuelve un error.
- NCHAR: Es un tipo de datos Unicode que almacena caracteres Unicode. Tiene longitud fija y puede contener hasta 2000 caracteres, pero en tiempo de ejecución el peso total no puede superar los 2000 bytes.
- NVARCHAR2: Indica una cadena de caracteres de longitud variable.
Ejemplo:
-- Crear tabla con tipos de datos de caracteres
CREATE TABLE datos_caracteres (
id NUMBER,
nombre CHAR(10), -- Longitud fija de 10 caracteres
descripcion VARCHAR2(100), -- Longitud variable hasta 100 caracteres
codigo_nacional NCHAR(5), -- Longitud fija para Unicode
notas NVARCHAR2(50) -- Longitud variable para Unicode
);
-- Insertar datos
INSERT INTO datos_caracteres (id, nombre, descripcion, codigo_nacional, notas)
VALUES (1, 'Juan', 'Analista de datos', 'ES001', 'Notas en español');
-- Consultar datos
SELECT * FROM datos_caracteres;
#2. Tipo de datos LONG
Las columnas LONG solo se admiten por compatibilidad con versiones anteriores, por lo que no es recomendable crear tablas con columnas LONG. Se aconseja usar columnas LOB (CLOB, BLOB, NCLOB).
Ejemplo:
-- Crear tabla con tipo de datos LONG
CREATE TABLE documentos_antiguos (
id NUMBER,
contenido LONG -- Texto largo (obsoleto)
);
-- Insertar datos
INSERT INTO documentos_antiguos (id, contenido)
VALUES (1, 'Este es un texto largo para compatibilidad con versiones antiguas.');
-- Consultar datos
SELECT id, SUBSTR(contenido, 1, 50) AS contenido_parcial FROM documentos_antiguos;
#3. Tipo de datos numéricos
Los datos numéricos de la base de datos de Oracle pueden almacenar números:
- Fijos
- Móviles positivos y negativos
- Cero
- Infinito
- Valores
Los tipos de datos numéricos son:
- NUMBER (p,s): Permite almacenar valores numéricos, positivos y negativos, de números de punto fijo y flotante. Los parámetros p y s indican, respectivamente, la precisión y la escala. La escala puede tener un valor de -84 a 127, mientras que la precisión de 1 a 38. Si se omiten estos valores, Oracle considera el valor máximo para ambos.
Es necesario seguir estas reglas para conocer los límites de almacenamiento:
- La escala indica las cifras después de la coma, es decir, las decimales.
- El número de cifras enteras se obtiene restando p – s.
Sin embargo, estas reglas no siempre son válidas, por ejemplo, cuando el valor de la escala es mayor que el de la precisión o es negativo.
- FLOAT: Es un subconjunto de NUMBER. Se puede especificar con o sin precisión p, que tiene el mismo rango de valores que NUMBER; no se puede especificar la escala s, pero es interpretable a partir del dato.
- BINARY_FLOAT, BINARY_DOUBLE: Son similares al tipo de datos NUMBER. Utilizan precisión binaria en lugar de decimal, lo que permite cálculos aritméticos más rápidos y un tamaño más reducido. Sin embargo, estos tipos se usan para almacenar aproximaciones de valores, no su representación exacta.
Ejemplo:
-- Crear tabla con tipos de datos numéricos
CREATE TABLE datos_numericos (
id NUMBER,
precio NUMBER(10,2), -- Número con 2 decimales
distancia FLOAT, -- Punto flotante
velocidad BINARY_FLOAT, -- Precisión binaria
tamano BINARY_DOUBLE -- Precisión binaria doble
);
-- Insertar datos
INSERT INTO datos_numericos (id, precio, distancia, velocidad, tamano)
VALUES (1, 123.45, 56.78, 1.23E2, 4.56E4);
-- Consultar datos
SELECT * FROM datos_numericos;
#4. Tipos de datos RAW y LONG RAW
Los tipos de datos RAW y LONG RAW almacenan datos que no requieren conversión explícita por parte de la base de datos de Oracle cuando se trasladan entre sistemas diferentes. Son datos binarios o cadenas de bytes.
Por ejemplo, LONG RAW se puede usar para almacenar gráficos, documentos, matrices de datos binarios o sonidos, cuya interpretación depende del uso.
Oracle recomienda convertir las columnas LONG RAW en columnas LOB binarias (BLOB). Las columnas LOB tienen menos restricciones que las columnas LONG. RAW tiene longitud variable.
Ejemplo:
-- Crear tabla con tipos de datos RAW y LONG RAW
CREATE TABLE datos_binarios (
id NUMBER,
hash RAW(16), -- Datos binarios de longitud variable
archivo LONG RAW -- Datos binarios largos (obsoleto)
);
-- Insertar datos (usando datos binarios en hexadecimal)
INSERT INTO datos_binarios (id, hash, archivo)
VALUES (1, HEXTORAW('A1B2C3D4E5F6A7B8'), HEXTORAW('FF00AA11BB22CC33'));
-- Consultar datos
SELECT id, hash, UTL_RAW.CAST_TO_VARCHAR2(archivo) AS archivo_texto FROM datos_binarios;
#5. Tipo de datos extendido
Se puede especificar un tamaño máximo de 32767 bytes para los tipos de datos VARCHAR2, RAW y NVARCHAR2. Para verificar si la base de datos admite este tamaño máximo, se puede configurar el parámetro de inicialización MAX_STRING_SIZE de la siguiente manera:
- Si MAX_STRING_SIZE = EXTENDED, el límite de tamaño es de 32767 bytes para los datos VARCHAR2, RAW y NVARCHAR2.
- Si MAX_STRING_SIZE = STANDARD, se aplican los límites de tamaño de las versiones anteriores a Oracle Database 12c: 2000 bytes para RAW y 4000 bytes para NVARCHAR2 y VARCHAR2. Esta es la configuración predeterminada.
Ejemplo:
-- Configurar MAX_STRING_SIZE = EXTENDED (requiere privilegios de administrador)
ALTER SYSTEM SET MAX_STRING_SIZE=EXTENDED;
-- Crear tabla con tipos de datos extendidos
CREATE TABLE datos_extendidos (
id NUMBER,
texto_largo VARCHAR2(32767), -- Máximo 32767 bytes
datos_binarios RAW(32767),
texto_unicode NVARCHAR2(32767)
);
-- Insertar datos
INSERT INTO datos_extendidos (id, texto_largo, datos_binarios, texto_unicode)
VALUES (1, RPAD('Texto largo', 1000, '.'), HEXTORAW('1234'), RPAD('Texto Unicode', 500, '.'));
-- Consultar datos
SELECT id, LENGTH(texto_largo) AS longitud_texto FROM datos_extendidos;
#6. Tipo de datos de objeto grande (LOB)
Los datos LOB, que incluyen BLOB, NCLOB, CLOB y BFILE, pueden almacenar datos no estructurados y de gran tamaño, como datos espaciales, texto, video e imágenes.
- BLOB: Datos no estructurados, binarios. Los objetos BLOB se consideran flujos de bits sin semántica de conjunto de caracteres.
- NCLOB: Almacena datos Unicode. Admite conjuntos de caracteres de ancho fijo y variable, y ambos usan el conjunto de caracteres nacional.
- CLOB: Almacena datos de caracteres de byte único y multibyte. Se admiten conjuntos de caracteres de ancho fijo y variable, y ambos usan el conjunto de caracteres de la base de datos.
- BFILE: Permite acceder a LOB de archivos binarios almacenados en sistemas de archivos externos a la base de datos de Oracle.
Ejemplo:
-- Crear tabla con tipos de datos LOB
CREATE TABLE datos_lob (
id NUMBER,
imagen BLOB, -- Datos binarios
texto CLOB, -- Texto largo
texto_unicode NCLOB, -- Texto Unicode largo
archivo_externo BFILE -- Archivo externo
);
-- Insertar datos (ejemplo con datos simples)
INSERT INTO datos_lob (id, imagen, texto, texto_unicode)
VALUES (1, EMPTY_BLOB(), 'Este es un texto largo para CLOB.', 'Texto Unicode para NCLOB.');
-- Para BFILE, se necesita un directorio
CREATE DIRECTORY archivos_ext AS '/ruta/a/archivos';
INSERT INTO datos_lob (id, archivo_externo)
VALUES (2, BFILENAME('ARCHIVOS_EXT', 'ejemplo.pdf'));
-- Consultar datos
SELECT id, DBMS_LOB.GETLENGTH(imagen) AS tamano_imagen, SUBSTR(texto, 1, 50) AS texto_parcial FROM datos_lob;
#7. Tipos de datos de fecha y hora e intervalo
Este tipo de datos es útil para almacenar fechas y cantidades de tiempo en una tabla.
Los tipos de datos de fecha y hora son:
- DATE: Almacena información sobre la fecha y la hora. Para cada valor DATE, Oracle guarda: segundos, minutos, hora, día, mes, año y siglo.
- TIMESTAMP: Es una extensión de DATE. Almacena segundos, minutos, día, mes y año de DATE. Es útil para recopilar y evaluar información de fechas en áreas geográficas y permite almacenar valores temporales precisos.
- INTERVAL YEAR TO MONTH: Almacena un período de tiempo usando los campos MONTH y YEAR de fecha y hora. Es efectivo para representar la diferencia entre dos valores de fecha y hora cuando solo los valores de mes y año son relevantes.
- INTERVAL DAY TO SECOND: Almacena un período de tiempo usando los campos DAY, HOUR, MINUTE y SECOND. Es efectivo para representar diferencias entre valores de fecha y hora cuando se requiere precisión a nivel de segundos, como en cálculos de duración de eventos o intervalos de tiempo específicos.
Ejemplo:
-- Crear tabla con tipos de datos de fecha y hora
CREATE TABLE datos_temporales (
id NUMBER,
fecha_registro DATE, -- Fecha y hora
momento_exacto TIMESTAMP, -- Fecha con fracciones de segundo
periodo INTERVAL YEAR TO MONTH, -- Intervalo de tiempo (año a mes)
periodo_segundos INTERVAL DAY TO SECOND -- Intervalo de tiempo (día a segundo)
);
-- Insertar datos
INSERT INTO datos_temporales (id, fecha_registro, momento_exacto, periodo, periodo_segundos)
VALUES (1, SYSDATE, CURRENT_TIMESTAMP, INTERVAL '2-6' YEAR TO MONTH, INTERVAL '3 12:30:45.123' DAY TO SECOND);
-- Consultar datos
SELECT id, fecha_registro, momento_exacto, periodo, periodo_segundos FROM datos_temporales;
Conclusiones
Se han presentado los 7 tipos de datos principales en Oracle.
Si se desea aprender a gestionar y manipular datos en la base de datos de Oracle de manera efectiva, en nuestra sección de cursos encontrará lo ideal para ti.
Al finalizar el curso, se podrá identificar los componentes estructurales de la base de datos de Oracle, crear y gestionar informes de datos, entre otras habilidades.