Cómo especificar valores predeterminados en una tabla de Oracle

Al crear una tabla de base de datos en Oracle, tienes la opción de especificar un valor predeterminado para las columnas. Utilizar valores predeterminados en las columnas de una base de datos ayuda a aislar los problemas de diseño de la base de datos del código de la aplicación.

Índice de Contenido
  1. Asegurar consistencia en los valores
  2. Uso de valores predeterminados en INSERT o MERGE
  3. Valores por defecto en sentencias INSERT, MERGE o UPDATE
  4. Emular una funcionalidad de Autonumber
  5. Uso de SYS_CONTEXT para obtener valores predeterminados
  6. Utilizar SYS_GUID para valores únicos

Asegurar consistencia en los valores

Los valores predeterminados permiten que la aplicación utilice los nuevos valores inmediatamente, incluso cuando se cambia el valor predeterminado de una columna en una fecha posterior mediante el comando ALTER TABLE.

Uso de valores predeterminados en INSERT o MERGE

Es importante recordar que los valores predeterminados solo se utilizan cuando una columna no se especifica en una instrucción INSERT o MERGE, o cuando se utiliza la palabra clave DEFAULT. Si no se declara explícitamente un valor predeterminado, Oracle define implícitamente el valor predeterminado como NULL. Desde Oracle 9i, también se pueden utilizar pseudocolumnas como SYSDATE o CURRENT_TIMESTAMP en las cláusulas DEFAULT. Por ejemplo:

CREATE TABLE t1
(
id$ INTEGER NOT NULL,
charcol CHAR DEFAULT 'Y',
datecol DATE DEFAULT SYSDATE,
strcol VARCHAR2(30) DEFAULT USER,
intcol INTEGER DEFAULT 12
);
INSERT INTO t1 (id$) VALUES (1);
SELECT * FROM t1;

Valores por defecto en sentencias INSERT, MERGE o UPDATE

La palabra clave DEFAULT puede parecer innecesaria en las sintaxis INSERT, MERGE o UPDATE, pero es útil cuando se desea insertar una fila utilizando todos los valores predeterminados. Oracle no acepta las sentencias INSERT INTO <tabla> o INSERT INTO <tabla> VALUES () como SQL válido. Debes especificar al menos una columna, pero puedes utilizar la palabra clave DEFAULT para permitir que se utilice el valor predeterminado en lugar de codificar un valor específico. Por lo tanto, la siguiente sintaxis es válida para crear una fila con todos los valores predeterminados:

CREATE TABLE t2 (charcol CHAR DEFAULT 'Y',datecol DATE DEFAULT SYSDATE);
INSERT INTO t2 (charcol) VALUES (DEFAULT);
SELECT * FROM t2;

Cómo crear y gestionar relaciones de muchos a muchos en Access

Emular una funcionalidad de Autonumber

Un problema muy común es emular la funcionalidad de Autonumber de otros proveedores de bases de datos, donde una columna se popularr automáticamente con algún tipo de número de secuencia. En las bases de datos de Oracle, no puedes especificar un número de secuencia como valor predeterminado para una columna; sin embargo, puedes emular esta funcionalidad utilizando un trigger. Incluso si una columna está declarada como NOT NULL, aún puedes omitir la columna en las sentencias INSERT para que se complete en el trigger. Observa el uso de la palabra clave DEFAULT en lugar de un NULL explícito para mayor legibilidad:

CREATE SEQUENCE t3_seq;
CREATE TABLE t3 (id$ INTEGER CONSTRAINT t3_pk PRIMARY KEY);
CREATE OR REPLACE TRIGGER t3_autonumber
BEFORE INSERT ON t3 FOR EACH ROW
BEGIN
IF :new.id$ IS NULL THEN
SELECT t3_seq.nextval
INTO :new.id$ FROM dual;
END IF;
END;
INSERT INTO t3 (id$) VALUES (DEFAULT);
SELECT * FROM t3;

Uso de SYS_CONTEXT para obtener valores predeterminados

Puedes utilizar los valores predeterminados de las columnas desde el conjunto de valores SYS_CONTEXT y recopilar información importante sobre una sesión en algún lugar:

CREATE TABLE t4
(
when DATE DEFAULT SYSDATE,
db_domain VARCHAR2(200) DEFAULT SYS_CONTEXT('USERENV', 'DB_DOMAIN'),
host VARCHAR2(256) DEFAULT SYS_CONTEXT('USERENV', 'HOST'),
ip_address VARCHAR2(256) DEFAULT SYS_CONTEXT('USERENV', 'IP_ADDRESS'),
language VARCHAR2(256) DEFAULT SYS_CONTEXT('USERENV', 'LANGUAGE'),
protocol VARCHAR2(200) DEFAULT SYS_CONTEXT('USERENV', 'NETWORK_PROTOCOL'),
terminal VARCHAR2(200) DEFAULT SYS_CONTEXT('USERENV', 'TERMINAL')
);
INSERT INTO t4 (when) VALUES (DEFAULT);
SELECT * FROM t4;

Utilizar SYS_GUID para valores únicos

También puedes utilizar la pseudocolumna SYS_GUID para completar una columna con un valor único en todo el mundo sin necesidad de un número de secuencia o un trigger adicional:

CREATE TABLE t5 (id$ RAW(16) DEFAULT sys_guid() CONSTRAINT t5_pk PRIMARY KEY);
INSERT INTO t5 (id$) VALUES (DEFAULT);
SELECT * FROM t5;

Diferencias entre las cláusulas IN y EXISTS en SQL: Cuál utilizar

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Gestión de datos, allí encontraras muchos artículos similares a Cómo especificar valores predeterminados en una tabla de Oracle , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.