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

hvordan man bruger check constraint i oracle

Introduktion

Oracle Check-begrænsning bruges til at håndhæve integritetsregler baseret på logiske udtryk, såsom sammenligninger. De logiske udtryk, der bruges, skal returnere den booleske værdi.
Eksempel
En CHECK-begrænsning på medarbejdernes lønninger, så ingen lønværdi er større end 100.000.
En CHECK-begrænsning på afdelingslokationer, så kun lokationerne "DELHI", "PATNA" og "MUMBAI" er tilladt.

Sådan fungerer oracle check constraint

  1. Du definerer kontrolbegrænsningerne på kolonnen i en tabel. Check constraints er et logisk udtryk, der evalueres til boolsk værdi sand eller falsk
  2. Når rækker indsættes eller opdateres i tabellen, kontrollerer Oracle de logiske udtryk.
  3. Hvis det vurderes til True, accepterer Oracle dataene og overfører dem med indsæt eller slet
  4. Hvis det vurderes til falsk, afviser Oracle dataene

Vigtige punkter om kontrolbegrænsning

en. Check begrænsning kan oprettes på en kolonne eller en gruppe af kolonner.
b. En kolonne kan have en eller flere kontrolbegrænsninger.
c. Den rækkefølge, som begrænsningerne evalueres i, er ikke defineret
d. Brug aldrig CHECK-begrænsninger, når nogen af ​​de andre typer integritetsbegrænsninger kan give den nødvendige kontrol.
e. Når du definerer flere begrænsninger, skal du sørge for, at de ikke er i konflikt med hinanden

Tjek begrænsning af begrænsninger

(1) Betingelsen skal være et boolesk udtryk, der kan evalueres ved hjælp af værdierne i rækken, der indsættes eller opdateres.
(2) Betingelsen må ikke have
en. underforespørgsler eller sekvenser.
b. SYSDATE, UID, USER eller USERENV SQL-funktioner.
c. pseudokolonner LEVEL, PRIOR eller ROWNUM.
d. brugerdefineret SQL-funktion.
(3) En kontrolbegrænsning kan ikke henvise til kolonner i andre tabeller
(4) En kontrolbegrænsning kan ikke oprettes på en orakelvisning

Sådan opretter du check-begrænsningen i Oracle

Oracle kontrol begrænsninger kan oprettes med oprette tabel klausulen eller efter tabellen er blevet oprettet med alter tabel klausul.
Nu med oprettelse af en tabel, kan tjek begrænsninger oprettes i in-line kolonne syntaks eller out-of-line syntaks.

in-line syntaks

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.

Vi kan også give check-begrænsningen et brugerdefineret navn

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 syntaks

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.

Vi kan også give check-begrænsningen et brugerdefineret navn

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.

Når flere kolonner er involveret, går vi kun med out-of-line syntaks
Hvis du bruger inline syntaks, vil det give en fejl

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 kontrolbegrænsning tilføjes, efter at tabellen er oprettet ved hjælp af alter-tabellens syntaks

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.

Sådan finder du kontrolbegrænsningen på bordet

Følgende ordbog indeholder visninger oplysningerne om begrænsning
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';

Her står C for Check constraint

Sådan aktiverer/deaktiverer du kontrolbegrænsningen

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

Sådan dropper du kontrolbegrænsningen

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

Eksempel på check-begrænsninger

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

Læser også
ændre tabel tilføj primær nøgle oracle :primær nøgle i oracle identificerer entydigt rækken i tabellen. Det kan ikke være null &kan oprettes på tidspunktet for tabeloprettelse eller efter tabellen er oprettet
not null constraint i Oracle :not null constraint i oracle bruges til at gennemtvinge ikke null-værdier i kolonnen i tabellen. Tjek, hvordan du tilføjer, slip nul-begrænsningerne
Unik nøgle i Oracle:Unik nøgle håndhæver unik i kolonnen i tabellen og hjælper os med at identificere rækken hurtigt. Oracle opretter det unikke indeks for nøglen, hvis intet indeks er tilgængeligt
slip udenlandsk nøgle-begrænsning oracle:Vi kan droppe begrænsningen i Oracle ved at bruge alter table-kommandoen. vi kan droppe primær, fremmed nøgle, check, ikke null og unik begrænsning med den samme kommando
delete-kommando i oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm

Anbefalede kurser

Her er det fine Udemy-kursus til Oracle SQL
Oracle-Sql-trin-for-trin :Dette kursus dækker grundlæggende sql, joins, oprettelse af tabeller og ændring af strukturen, Create View, Union, Union -alle og meget andet. . Et godt kursus og must-have kursus for SQL starter
The Complete Oracle SQL Certification Course :Dette er et godt kursus for enhver, der ønsker at være jobklar til SQL-udviklerfærdigheder. Et godt forklaret kursus
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-udviklerværktøj bliver brugt af mange udviklere. Dette kursus giver os tricks og lektioner til, hvordan man effektivt bruger det og bliver en produktiv sql-udvikler
Oracle SQL Performance Tuning Masterclass 2020 :Ydeevnejustering er en af ​​de kritiske og mest søgte færdigheder. Dette er et godt kursus for at lære om det og begynde at lave sql-ydelsesjustering


  1. Oracle CLOB kan ikke indsætte mere end 4000 tegn?

  2. Oracle - Hvorfor skal jeg bruge pakker i stedet for selvstændige procedurer eller funktioner

  3. Sådan installeres MySQL med phpMyAdmin på Debian 7

  4. Refaktorer fremmednøgle til felter