Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

como usar check constraint no oracle

Introdução


Restrição do Oracle Check é usado para impor regras de integridade com base em expressões lógicas, como comparações. As expressões lógicas usadas devem retornar o valor booleano.
Exemplo
Uma restrição CHECK nos salários dos funcionários para que nenhum valor do salário seja maior que 100.000.
Uma restrição CHECK nos locais dos departamentos para que apenas os locais “DELHI”, “PATNA” e “MUMBAI” são permitidos.

Como funciona a restrição oracle check

  1. Você define as restrições de verificação na coluna de uma tabela. As restrições de verificação são expressões lógicas que são avaliadas como um valor booleano verdadeiro ou falso
  2. Quando as linhas são inseridas ou atualizadas na tabela, o oracle verifica as expressões lógicas.
  3. Se for avaliado como Verdadeiro, a Oracle aceita os dados e continua com insert ou delete
  4. Se for avaliado como falso, a Oracle rejeita os dados

Pontos importantes sobre a restrição de verificação


uma. A restrição de verificação pode ser criada em uma coluna ou em um grupo de colunas.
b. Uma coluna pode ter uma ou mais restrições de verificação.
c. A ordem em que as restrições são avaliadas não está definida
d. Nunca use restrições CHECK quando qualquer um dos outros tipos de restrições de integridade puder fornecer a verificação necessária.
e. Ao definir várias restrições, certifique-se de que elas não entrem em conflito umas com as outras

Verificar limitação de restrições


(1) A condição deve ser uma expressão booleana que possa ser avaliada usando os valores na linha que está sendo inserida ou atualizada.
(2) A condição não pode ter
a. subconsultas ou sequências.
b. Funções SQL SYSDATE, UID, USER ou USERENV.
c. pseudo colunas LEVEL, PRIOR ou ROWNUM.
d. função SQL definida pelo usuário.
(3) Uma restrição de verificação não pode referenciar colunas em outras tabelas
(4) Uma restrição de verificação não pode ser criada em uma visão oracle

Como criar a restrição de verificação no oracle


As restrições de verificação do Oracle podem ser criadas com a cláusula create table ou após a criação da tabela com a cláusula alter table.
Agora, com a criação de uma tabela, as restrições de verificação podem ser criadas na sintaxe de coluna in-line ou out-of-line sintaxe.

sintaxe em linha
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.

Podemos dar à restrição de verificação um nome personalizado também
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.

sintaxe fora de linha
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.

Podemos dar à restrição de verificação um nome personalizado também
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.

Quando várias colunas estão envolvidas, usamos apenas a sintaxe fora de linha
Se você usar a sintaxe em linha, ele gerará um erro
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.

Agora a restrição de verificação pode ser adicionada após a criação da tabela usando a sintaxe alter table
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.

Como encontrar a restrição de cheque na tabela


Seguindo o dicionário, as visualizações contêm as informações sobre a restrição
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';

Aqui C significa Check constraint

Como ativar/desativar a restrição de verificação

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

Como eliminar a restrição de verificação

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

Exemplo de restrições de verificação

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

Também lê
alter table add primary key oracle :a chave primária no oracle identifica exclusivamente a linha na tabela. Não pode ser nulo e pode ser criado no momento da criação da tabela ou após a criação da tabela
restrição não nula no Oracle:a restrição não nula no oracle é usada para impor valores não nulos na coluna na tabela. Confira como adicionar, eliminar as restrições nulas
Chave exclusiva no Oracle:A chave exclusiva impõe a exclusividade na coluna da tabela e nos ajuda a identificar a linha rapidamente. O Oracle cria o índice exclusivo para a chave se nenhum índice estiver disponível
solte a restrição de chave estrangeira oracle:Podemos descartar a restrição no oracle usando o comando alter table. podemos descartar a chave primária, estrangeira, verificar, não nula e restrição exclusiva com o mesmo comando
delete comando no oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm

Cursos recomendados


Aqui está o bom curso da Udemy para Oracle SQL
Oracle-Sql-Step-by-step:Este curso abrange sql básico, junções, criação de tabelas e modificação de sua estrutura, criação de exibição, união, união -tudo e muitas outras coisas . Um ótimo curso e curso obrigatório para iniciantes em SQL
O Curso Completo de Certificação Oracle SQL :Este é um bom curso para quem quer estar pronto para trabalhar com habilidades de desenvolvedor SQL. Um bom curso explicado
Oracle SQL Developer:Essentials, Tips and Tricks :A ferramenta de desenvolvedor Oracle Sql está sendo usada por muitos desenvolvedores. Este curso nos dá truques e lições sobre como usá-lo efetivamente e se tornar um desenvolvedor sql produtivo
Oracle SQL Performance Tuning Masterclass 2020 :O ajuste de desempenho é uma das habilidades críticas e mais procuradas. Este é um bom curso para aprender sobre isso e começar a fazer o ajuste de desempenho do sql