sql >> Database >  >> RDS >> Oracle

hoe gebruik je check constraint in oracle?

Inleiding

Oracle Check-beperking wordt gebruikt om integriteitsregels af te dwingen op basis van logische uitdrukkingen, zoals vergelijkingen. De gebruikte logische expressies moeten de booleaanse waarde retourneren.
Voorbeeld
Een CHECK-beperking op de salarissen van werknemers zodat geen enkele salariswaarde groter is dan 100000.
Een CHECK-beperking op afdelingslocaties, zodat alleen de locaties "DELHI", "PATNA" en "MUMBAI" zijn toegestaan.

Hoe de beperking van de Oracle-controle werkt

  1. U definieert de controlebeperkingen voor de kolom in een tabel. Check constraints is een logische uitdrukking die evalueert naar de booleaanse waarde waar of onwaar
  2. Als rijen worden ingevoegd of bijgewerkt in de tabel, controleer dan de logische uitdrukkingen.
  3. Als het wordt geëvalueerd als True, accepteert Oracle de gegevens en draagt ​​het over met invoegen of verwijderen
  4. Als het evalueert als onwaar, verwerpt orakel de gegevens

Belangrijke punten bij controlebeperking

a. Controlebeperking kan worden gemaakt voor een kolom of een groep kolommen.
b. Een kolom kan een of meer controlebeperkingen hebben.
c. De volgorde waarin de beperkingen worden geëvalueerd is niet gedefinieerd
d. Gebruik nooit CHECK-beperkingen wanneer een van de andere typen integriteitsbeperkingen voor de nodige controle kan zorgen.
e. Zorg er bij het definiëren van meerdere beperkingen voor dat ze niet met elkaar conflicteren

Controleer beperkingen Beperking

(1) De voorwaarde moet een booleaanse uitdrukking zijn die kan worden geëvalueerd met behulp van de waarden in de rij die wordt ingevoegd of bijgewerkt.
(2) De voorwaarde mag geen
a hebben. subquery's of reeksen.
b. SYSDATE, UID, USER of USERENV SQL-functies.
c. pseudokolommen LEVEL, PRIOR of ROWNUM.
d. door de gebruiker gedefinieerde SQL-functie.
(3) Een controlebeperking kan niet verwijzen naar kolommen in andere tabellen
(4) Er kan geen controlebeperking worden gemaakt in een orakelweergave

Hoe de controlebeperking in Oracle te creëren

Oracle-controlebeperkingen kunnen worden gemaakt met de clausule tabel maken of nadat de tabel is gemaakt met de clausule tabel wijzigen.
Nu met het maken van een tabel, kunnen controlebeperkingen worden gemaakt in in-line kolomsyntaxis of out-of-line syntaxis.

in-line syntaxis

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.

We kunnen de controlebeperking ook een aangepaste naam geven

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.

out-of-line syntaxis

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.

We kunnen de controlebeperking ook een aangepaste naam geven

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.

Als er meerdere kolommen bij betrokken zijn, gebruiken we alleen out-of-line syntaxis
Als u inline syntaxis gebruikt, geeft dit een fout

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.

Nu kan controlebeperking worden toegevoegd nadat de tabel is gemaakt met behulp van de tabelsyntaxis wijzigen

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.

Hoe de controlebeperking op de tafel te vinden

Volgend woordenboek bevatten weergaven de informatie over beperking
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';

Hier staat C voor Check constraint

Hoe de controlebeperking in-/uitschakelen

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

Hoe de controlebeperking te laten vallen

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

Voorbeeld van controlebeperkingen

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

Leest ook
tabel wijzigen primaire sleutel toevoegen orakel:primaire sleutel in orakel identificeert op unieke wijze de rij in de tabel. Het kan niet null zijn en kan worden gemaakt op het moment dat de tabel wordt gemaakt of nadat de tabel is gemaakt
niet null-beperking in Oracle :niet-null-beperking in Oracle wordt gebruikt om niet-null-waarden in de kolom in de tabel af te dwingen. Bekijk hoe u de null-beperkingen kunt toevoegen en verwijderen
Unieke sleutel in Oracle:Unieke sleutel dwingt uniek af in de kolom in de tabel en helpt ons de rij snel te identificeren. Oracle maakt de unieke index voor de sleutel als er geen index beschikbaar is
drop externe sleutelbeperking oracle:We kunnen de beperking in Oracle laten vallen met behulp van de opdracht alter table. we kunnen de primaire, externe sleutel, check, not null en unique constraint laten vallen met hetzelfde commando
delete commando in oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm

Aanbevolen cursussen

Hier is de mooie Udemy-cursus voor Oracle SQL
Oracle-Sql-Step-voor-stap:deze cursus behandelt basis-sql, joins, tabellen maken en de structuur wijzigen, weergave maken, Union, Union -alles en nog veel meer . Een geweldige cursus en een must-have cursus voor SQL-starters
De complete Oracle SQL-certificeringscursus :Dit is een goede cursus voor iedereen die Job-klaar wil zijn voor SQL-ontwikkelaarsvaardigheden. Een mooi uitgelegde cursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-ontwikkelaarstool wordt door veel ontwikkelaars gebruikt. Deze cursus geeft ons trucs en lessen om het effectief te gebruiken en een productieve sql-ontwikkelaar te worden
Oracle SQL Performance Tuning Masterclass 2020 :Het afstemmen van prestaties is een van de belangrijkste en meest gezochte vaardigheden. Dit is een goede cursus om erover te leren en te beginnen met het afstemmen van sql-prestaties


  1. Wat betekent een (+) teken in een Oracle SQL WHERE-clausule?

  2. Wat is het verschil tussen INNER JOIN, LEFT JOIN, RIGHT JOIN en FULL JOIN?

  3. Hoe maak je een back-up en herstel je een PostgreSQL-database

  4. Zoeken in Microsoft Access-gegevens met Elasticsearch