Oracle Check Constraint

Resumen: en este tutorial, aprenderá a utilizar la restricción de comprobación de Oracle para hacer cumplir la integridad del dominio.

  • Introducción a la restricción de comprobación o CHECK de Oracle
  • Creación de sintaxis de restricción de verificación o CHECK
  • Creación de ejemplos de restricciones de comprobación de Oracle
  • Agregar restricción de verificación a una tabla
  • Restricción de comprobación de caída
  • Deshabilitar/habilitar restricción de verificación
  • Restricciones de la restricción de verificación de Oracle

Introducción a la restricción de comprobación o CHECK de Oracle

Una restricción de verificación de Oracle le permite hacer cumplir la integridad del dominio al limitar los valores aceptados por una o más columnas.

Para crear una restricción de verificación, defina una expresión lógica que devuelva verdadero o falso. Oracle usa esta expresión para validar los datos que se están insertando o actualizando. Si la expresión se evalúa como verdadera, Oracle acepta los datos y lleva la inserción o actualización. De lo contrario, Oracle rechazará los datos y no los inserta ni actualiza en absoluto.

Puede aplicar una restricción de verificación a una columna o grupo de columnas. Una columna puede tener una o más restricciones de verificación o check con nombre diferentes.

Cuando aplique varias restricciones de verificación a una columna, asegúrese de que no sean mutuamente excluyentes. Además, no debe asumir ningún orden particular de evaluación de las expresiones.

Creación de sintaxis de restricción de verificación o check.

Normalmente, crea una restricción de verificación en una columna cuando crea la tabla:

CREATE TABLE table_name (
    ...
    column_name data_type CHECK (expression),
    ...
);

En esta sintaxis, una restricción de comprobación consta de la palabra clave CHECK seguida de una expresión entre paréntesis. La expresión siempre debe involucrar la columna así restringida. De lo contrario, la restricción de verificación no tiene ningún sentido.

Si desea asignar a la restricción de verificación un nombre explícito, use la cláusula CONSTRAINT a continuación:

CONSTRAINT check_constraint_name
CHECK (expression);

Cuando una restricción de verificación está en la misma línea que la columna de la tabla, su sintaxis se denomina restricción en línea.

Además, puede utilizar la sintaxis de restricción fuera de línea de la siguiente manera:

CREATE TABLE table_name (
    ...,
    CONSTRAINT check_constraint_name CHECK (expresssion)
);

Creación de ejemplos de restricciones de comprobación de Oracle

El siguiente ejemplo crea la tabla de piezas cuyos precios de compra son positivos:

CREATE TABLE parts (
    part_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    part_name VARCHAR2(255) NOT NULL,
    buy_price NUMBER(9,2) CHECK(buy_price > 0),
    PRIMARY KEY(part_id)
);

Si intenta insertar 0 o un precio de compra negativo, se producirá un error:

INSERT INTO parts(part_name, buy_price)
VALUES('HDD',0);

Oracle emitió el siguiente error:
SQL Error: ORA-02290: check constraint (OT.SYS_C0010681) violated
En este mensaje de error, SYS_C0010681 es el nombre de la restricción de verificación asignada por Oracle.

Para analizar mejor el mensaje de error y hacer referencia a la restricción más adelante, puede asignar un nombre explícito a una restricción de verificación:

DROP TABLE parts;

CREATE TABLE parts (
    part_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
    part_name VARCHAR2(255) NOT NULL,
    buy_price NUMBER(9,2) CONSTRAINT check_positive_buy_price CHECK(buy_price > 0),
    PRIMARY KEY(part_id)
);

Ahora, si intenta insertar una pieza con un precio negativo:

INSERT INTO parts(part_name, buy_price)
VALUES('Screen',-100);

El mensaje de error es más preciso:
SQL Error: ORA-02290: check constraint (OT.CHECK_POSITIVE_BUY_PRICE) violated

Agregar restricción de verificación a una tabla

Para agregar una restricción de verificación a una tabla existente, use la instrucción ALTER TABLE ADD CONSTRAINT de la siguiente manera:

ALTER TABLE table_name
ADD CONSTRAINT check_constraint_name CHECK(expression);

Por ejemplo, la siguiente declaración agrega la columna de costos a la tabla de piezas:

ALTER TABLE parts
ADD cost NUMBER(9,2);

Suponga que el costo debe ser positivo y también mayor o igual al precio de compra. Para hacer cumplir estas reglas, agrega dos restricciones de verificación a la tabla de partes:

ALTER TABLE parts
ADD CONSTRAINT check_positive_cost CHECK (cost > 0);

ALTER TABLE parts
ADD CONSTRAINT check_valid_cost CHECK (cost > 0);

Restricción de comprobación de caída

Para eliminar una restricción de verificación, utilice la instrucción ALTER TABLE DROP CONSTRAINT de la siguiente manera:

ALTER TABLE table_name
DROP CONSTRAINT check_constraint_name;

Por ejemplo, para eliminar la restricción check_valid_cost, utilice la siguiente declaración:

ALTER TABLE parts
DROP CONSTRAINT check_valid_cost;

Deshabilitar / habilitar restricción de verificación

Las siguientes declaraciones deshabilitan y habilitan una restricción de verificación:

ALTER TABLE table_name
DISABLE CONSTRAINT check_constraint_name;

ALTER TABLE table_name
ENABLE CONSTRAINT check_constraint_name;

Por ejemplo, para deshabilitar temporalmente la restricción check_positive_buy_price, usa la siguiente declaración:

ALTER TABLE table_name
DISABLE CONSTRAINT check_positive_buy_price;

Y para habilitar la restricción check_positive_buy_price:

ALTER TABLE table_name
ENABLE CONSTRAINT check_positive_buy_price;

Restricciones de la restricción de verificación de Oracle

Las restricciones de comprobación de Oracle están sujetas a las siguientes restricciones:

  1. Puede definir restricciones de verificación solo para tablas, no para vistas.
  2. La expresión de la restricción de verificación puede hacer referencia a cualquier columna de la tabla, pero no puede referirse a columnas de otras tablas.
  3. La expresión tampoco puede contener una de las siguientes construcciones:
  • Funciones no deterministas como SYSDATE, CURRENT_DATE y CURRENT_TIMESTAMP.
  • Subconsultas o expresiones de subconsultas escalares.
  • Llamadas a cualquier función definida por el usuario.
  • Atributos o columnas de tabla anidadas.
  • Las pseudocolumnas CURRVAL, NEXTVAL, LEVEL o ROWNUM.
  • Constantes de fecha que no están completamente especificadas.

En este tutorial, ha aprendido a utilizar la restricción de comprobación de Oracle para especificar que los valores de una determinada columna o un grupo de columnas deben satisfacer una expresión.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *