sql >> Base de Datos >  >> RDS >> Oracle

cómo usar la restricción de verificación en Oracle

Introducción

Restricción de Oracle Check se utiliza para hacer cumplir las reglas de integridad basadas en expresiones lógicas, como las comparaciones. Las expresiones lógicas utilizadas deben devolver el valor booleano.
Ejemplo
Una restricción CHECK en los salarios de los empleados para que ningún valor de salario sea mayor que 100000.
Una restricción CHECK en las ubicaciones de los departamentos para que solo las ubicaciones Se permiten "DELHI", "PATNA" y "MUMBAI".

Cómo funciona la restricción de verificación de Oracle

  1. Usted define las restricciones de verificación en la columna de una tabla. Verificar restricciones es una expresión lógica que se evalúa como un valor booleano verdadero o falso
  2. Cuando se insertan o actualizan filas en la tabla, Oracle comprueba las expresiones lógicas.
  3. Si se evalúa como Verdadero, Oracle acepta los datos y los transfiere con insertar o eliminar
  4. Si se evalúa como falso, Oracle rechaza los datos

Puntos importantes sobre la restricción de verificación

una. La restricción de verificación se puede crear en una columna o en un grupo de columnas.
b. Una columna puede tener una o más restricciones de verificación.
do. El orden en que se evalúan las restricciones no está definido
d. Nunca utilice restricciones CHECK cuando cualquiera de los otros tipos de restricciones de integridad pueda proporcionar la verificación necesaria.
e. Al definir varias restricciones, asegúrese de que no entren en conflicto entre sí

Comprobar restricciones Limitación

(1) La condición debe ser una expresión booleana que se pueda evaluar utilizando los valores de la fila que se inserta o actualiza.
(2) La condición no puede tener
a. subconsultas o secuencias.
b. Funciones SQL SYSDATE, UID, USER o USERENV.
c. pseudocolumnas LEVEL, PRIOR o ROWNUM.
d. Función SQL definida por el usuario.
(3) Una restricción de verificación no puede hacer referencia a columnas en otras tablas
(4) No se puede crear una restricción de verificación en una vista de Oracle

Cómo crear la restricción de verificación en Oracle

Las restricciones de verificación de Oracle se pueden crear con la cláusula de creación de tabla o después de que la tabla se haya creado con la cláusula de modificación de tabla.
Ahora, con la creación de una tabla, las restricciones de verificación se pueden crear en sintaxis de columna en línea o fuera de línea sintaxis.

sintaxis en línea

SQL> CREATE TABLE "EMP"
 ("EMPNO" NUMBER(4,0),
 "ENAME" VARCHAR2(10),
 "JOB" VARCHAR2(9),
 "MGR" NUMBER(4,0),
 "HIREDATE" DATE, 
 "SAL" NUMBER(7,2) check(SAL > 1000),
 "COMM" NUMBER(7,2),
 "DEPTNO" NUMBER(2,0),
  CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
  );

 Table created.

También podemos darle a la restricción de verificación un nombre personalizado

SQL> CREATE TABLE "EMP"
    ("EMPNO" NUMBER(4,0),
     "ENAME" VARCHAR2(10),
     "JOB" VARCHAR2(9),
     "MGR" NUMBER(4,0),
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000),
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0),
      CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
      );
 
Table created.

sintaxis fuera de línea

SQL> CREATE TABLE "EMP"
 ("EMPNO" NUMBER(4,0),
 "ENAME" VARCHAR2(10),
 "JOB" VARCHAR2(9),
 "MGR" NUMBER(4,0),
 "HIREDATE" DATE,
 "SAL" NUMBER(7,2) ,
 "COMM" NUMBER(7,2),
 "DEPTNO" NUMBER(2,0),
 CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
 check(SAL > 1000)
 );

 Table created.

También podemos darle a la restricción de verificación un nombre personalizado

SQL> CREATE TABLE "EMP"
   ("EMPNO" NUMBER(4,0),
   "ENAME" VARCHAR2(10), 
   "JOB" VARCHAR2(9),  
   "MGR" NUMBER(4,0),
   "HIREDATE" DATE,
   "SAL" NUMBER(7,2) ,
   "COMM" NUMBER(7,2),
   "DEPTNO" NUMBER(2,0),
   CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
   constraint CHECK_SAL check(SAL > 1000)
    );
 
Table created.

Cuando hay varias columnas involucradas, usamos solo la sintaxis fuera de línea
Si usa la sintaxis en línea, generará un error

SQL> CREATE TABLE "EMP"
    ("EMPNO" NUMBER(4,0),
    "ENAME" VARCHAR2(10),
    "JOB" VARCHAR2(9),
    "MGR" NUMBER(4,0),
    "HIREDATE" DATE,
    "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000 and 
     DEPTNO is not null),
    "COMM" NUMBER(7,2),
    "DEPTNO" NUMBER(2,0),
    CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
    );
   
"SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null),
                                                                                  *
 ERROR at line 7:
 ORA-02438: Column check constraint cannot reference other columns

 SQL> CREATE TABLE "EMP"
     ("EMPNO" NUMBER(4,0),
      "ENAME" VARCHAR2(10),
      "JOB" VARCHAR2(9),
      "MGR" NUMBER(4,0),
      "HIREDATE" DATE,
      "SAL" NUMBER(7,2) ,
      "COMM" NUMBER(7,2),
      "DEPTNO" NUMBER(2,0),
      CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
      constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null)
       );
 Table created.

Ahora se puede agregar la restricción de verificación después de crear la tabla usando la sintaxis de modificación de tabla

SQL> CREATE TABLE "EMP"
    ("EMPNO" NUMBER(4,0),
    "ENAME" VARCHAR2(10),
    "JOB" VARCHAR2(9),
    "MGR" NUMBER(4,0),  
    "HIREDATE" DATE,
    "SAL" NUMBER(7,2) ,
    "COMM" NUMBER(7,2),
    "DEPTNO" NUMBER(2,0),  
    CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
    );
 Table created.

 SQL> alter table "EMP" add constraint  CHECK_SAL 
     check(SAL > 1000 and   DEPTNO is not null);
 Table altered.

Cómo encontrar la restricción de verificación en la tabla

Siguiendo el diccionario, las vistas contienen la información sobre la restricción
ALL_CONSTRAINTS
ALL_CONS_COLUMNS
USER_CONSTRAINTS
USER_CONS_COLUMNS
DBA_CONSTRAINTS
DBA_CONS_COLUMNS

SQL> column CONSTRAINT_NAME format a20
SQL> column SEARCH_CONDITION format a50
SQL> SELECT Constraint_name, Search_condition  
     FROM User_constraints  
     WHERE Table_name = 'EMP'  AND  
     Constraint_type = 'C';

Aquí C significa Verificar restricción

Cómo habilitar/deshabilitar la restricción de verificación

SQL> alter table "EMP"  disable constraint CHECK_SAL;
 Table altered.
 SQL> alter table "EMP"  enable  constraint CHECK_SAL;
 Table altered.

Cómo eliminar la restricción de verificación

 alter table "EMP"  drop constraint CHECK_SAL;
 Table altered. 

Ejemplo de restricciones de verificación

col1 >= 0 AND col1 < 85857 user_override in ('Y','N') class = 0 OR class = 1 hwm > 0
cm = 0 OR cm = 1
SEQ >= 0
status = 0 OR status = 1

También lee
modificar tabla agregar oráculo de clave principal:la clave principal en oráculo identifica de forma única la fila en la tabla. No puede ser nulo y se puede crear en el momento de la creación de la tabla o después de que se cree la tabla
restricción no nula en Oracle:la restricción no nula en Oracle se usa para imponer valores no nulos en la columna de la tabla Vea cómo agregar, eliminar las restricciones nulas
Clave única en Oracle:la clave única impone un único en la columna de la tabla y nos ayuda a identificar la fila rápidamente. Oracle crea el índice único para la clave si no hay ningún índice disponible. podemos eliminar la restricción principal, clave externa, verificar, no nula y única con el mismo comando /cláusulas002.htm

Cursos recomendados

Aquí está el buen curso de Udemy para Oracle SQL
Oracle-Sql-Step-by-step:este curso cubre sql básico, uniones, creación de tablas y modificación de su estructura, creación de vistas, unión, unión, todo y mucho más. . Un gran curso y un curso imprescindible para principiantes de SQL
El curso completo de certificación de Oracle SQL :Este es un buen curso para cualquier persona que quiera estar preparado para trabajar con habilidades de desarrollador de SQL. Un buen curso explicado
Oracle SQL Developer:fundamentos, consejos y trucos :muchos desarrolladores utilizan la herramienta de desarrollo Oracle Sql. Este curso nos brinda trucos y lecciones sobre cómo usarlo de manera efectiva y convertirnos en un desarrollador sql productivo
Oracle SQL Performance Tuning Masterclass 2020 :El ajuste del rendimiento es una de las habilidades críticas y más buscadas. Este es un buen curso para aprender sobre esto y comenzar a realizar ajustes de rendimiento de sql