Oracle
 sql >> Database >  >> RDS >> Oracle

come usare il vincolo di controllo in Oracle

Introduzione

Vincolo Oracle Check viene utilizzato per applicare regole di integrità basate su espressioni logiche, come i confronti. Le espressioni logiche utilizzate devono restituire il valore booleano.
Esempio
Un vincolo CHECK sugli stipendi dei dipendenti in modo che nessun valore di stipendio sia maggiore di 100000.
Un vincolo CHECK sulle ubicazioni dei reparti in modo che solo le ubicazioni Sono ammessi “DELHI”, “PATNA” e “MUMBAI”.

Come funziona il vincolo di controllo Oracle

  1. Definisci i vincoli di controllo sulla colonna di una tabella. Verifica vincoli è un'espressione logica che restituisce un valore booleano vero o falso
  2. Quando le righe vengono inserite o aggiornate nella tabella, Oracle controlla le espressioni logiche.
  3. Se viene valutato True, Oracle accetta i dati e prosegue con inserimento o eliminazione
  4. Se risulta falso, Oracle rifiuta i dati

Punti importanti sul vincolo di controllo

un. Il vincolo di verifica può essere creato su una colonna o un gruppo di colonne.
b. Una colonna può avere uno o più vincoli di controllo.
c. L'ordine in cui vengono valutati i vincoli non è definito
d. Non utilizzare mai i vincoli CHECK quando uno qualsiasi degli altri tipi di vincoli di integrità può fornire il controllo necessario.
e. Quando definisci più vincoli, assicurati che non siano in conflitto tra loro

Verifica limitazioni vincoli

(1) La condizione deve essere un'espressione booleana che può essere valutata utilizzando i valori nella riga da inserire o aggiornare.
(2) La condizione non può avere
a. sottoquery o sequenze.
b. Funzioni SQL SYSDATE, UID, USER o USERENV.
c. pseudo colonne LEVEL, PRIOR o ROWNUM.
d. funzione SQL definita dall'utente.
(3) Un vincolo check non può fare riferimento a colonne in altre tabelle
(4) Non è possibile creare un vincolo check su una vista Oracle

Come creare il vincolo di controllo in Oracle

I vincoli di controllo Oracle possono essere creati con la clausola create table o dopo che la tabella è stata creata con la clausola alter table.
Ora, con la creazione di una tabella, i vincoli di controllo possono essere creati nella sintassi della colonna in linea o fuori linea sintassi.

sintassi in linea

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.

Possiamo anche assegnare al vincolo di controllo un nome personalizzato

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.

sintassi fuori linea

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.

Possiamo anche assegnare al vincolo di controllo un nome personalizzato

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 sono coinvolte più colonne, utilizziamo solo la sintassi fuori linea
Se usi la sintassi in linea, verrà generato un errore

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.

Ora è possibile aggiungere il vincolo di controllo dopo la creazione della tabella utilizzando la sintassi di modifica della tabella

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.

Come trovare il vincolo di controllo sulla tabella

Seguendo il dizionario, le viste contengono le informazioni sul vincolo
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';

Qui C sta per Verifica vincolo

Come abilitare/disabilitare il vincolo di controllo

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

Come eliminare il vincolo di controllo

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

Esempio di vincoli di controllo

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

Legge anche
alter table add primary key oracle :la chiave primaria in Oracle identifica in modo univoco la riga nella tabella. Non può essere nullo e può essere creato al momento della creazione della tabella o dopo la creazione della tabella
vincolo not null in Oracle:il vincolo not null in Oracle viene utilizzato per imporre valori non nulli nella colonna della tabella. Scopri come aggiungere, eliminare i vincoli null
Chiave univoca in Oracle:la chiave univoca impone l'univocità nella colonna della tabella e ci aiuta a identificare rapidamente la riga. Oracle crea l'indice univoco per la chiave se non è disponibile alcun indice
rilascia il vincolo della chiave esterna oracle:possiamo eliminare il vincolo in Oracle utilizzando il comando alter table. possiamo eliminare la chiave primaria, esterna, controllare, non null e il vincolo univoco con lo stesso comando
cancella comando in Oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clausole002.htm

Corsi consigliati

Ecco il bel corso Udemy per Oracle SQL
Oracle-Sql-Step-by-step:questo corso copre SQL di base, join, creazione di tabelle e modifica della sua struttura, creazione di viste, unione, unione, tutto e molto altro . Un ottimo corso e un corso indispensabile per principianti SQL
Il corso completo di certificazione Oracle SQL :Questo è un buon corso per chiunque desideri essere pronto per il lavoro per le competenze di sviluppatore SQL. Un bel corso spiegato
Oracle SQL Developer:Essentials, Tips and Tricks :lo strumento di sviluppo Oracle Sql è utilizzato da molti sviluppatori. Questo corso offre trucchi e lezioni su come utilizzarlo in modo efficace e diventare uno sviluppatore sql produttivo
Oracle SQL Performance Tuning Masterclass 2020 :l'ottimizzazione delle prestazioni è una delle abilità critiche e più ricercate. Questo è un buon corso per conoscerlo e iniziare a ottimizzare le prestazioni di sql