sql >> Databasteknik >  >> RDS >> Oracle

hur man använder kontrollbegränsning i Oracle

Introduktion

Oracle Check-begränsning används för att upprätthålla integritetsregler baserade på logiska uttryck, såsom jämförelser. De logiska uttryck som används bör returnera det booleska värdet.
Exempel
En CHECK-begränsning på anställdas löner så att inget lönevärde är större än 100 000.
En CHECK-begränsning på avdelningens platser så att endast platserna "DELHI", "PATNA" och "MUMBAI" är tillåtna.

Så fungerar oracle check constraint

  1. Du definierar kontrollbegränsningarna för kolumnen i en tabell. Check constraints är ett logiskt uttryck som utvärderas till booleskt värde sant eller falskt
  2. När rader infogas eller uppdateras i tabellen, kontrollerar oracle de logiska uttrycken.
  3. Om det utvärderas till True, accepterar Oracle data och för vidare med infoga eller ta bort
  4. Om det utvärderas till falskt, avvisar Oracle data

Viktiga punkter om kontrollbegränsning

a. Kontrollbegränsning kan skapas på en kolumn eller en grupp av kolumner.
b. En kolumn kan ha en eller flera kontrollbegränsningar.
c. Ordningen i vilken begränsningarna utvärderas är inte definierad
d. Använd aldrig CHECK-begränsningar när någon av de andra typerna av integritetsbegränsningar kan ge den nödvändiga kontrollen.
e. När du definierar flera begränsningar, se till att de inte kommer i konflikt med varandra

Kontrollera begränsningar Begränsning

(1) Villkoret måste vara ett booleskt uttryck som kan utvärderas med hjälp av värdena i raden som infogas eller uppdateras.
(2) Villkoret kan inte ha
en. underfrågor eller sekvenser.
b. SYSDATE, UID, USER eller USERENV SQL-funktioner.
c. pseudokolumner LEVEL, PRIOR eller ROWNUM.
d. användardefinierad SQL-funktion.
(3) En kontrollbegränsning kan inte referera till kolumner i andra tabeller
(4) En kontrollbegränsning kan inte skapas i en orakelvy

Hur man skapar kontrollbegränsningen i Oracle

Oracle-kontrollrestriktioner kan skapas med create table-satsen eller efter att tabellen har skapats med alter table-sats.
Nu när du skapar en tabell kan kontrollrestriktioner skapas i in-line kolumnsyntax eller out-of-line syntax.

in-line syntax

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 också ge kontrollbegränsningen ett anpassat namn

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 syntax

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 också ge kontrollbegränsningen ett anpassat namn

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 flera kolumner är inblandade använder vi enbart out-of-line-syntax
Om du använder inline-syntax kommer det att ge ett fel

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 kontrollbegränsning läggas till efter att tabellen har skapats med hjälp av alter-tabellsyntaxen

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.

Hur man hittar kontrollbegränsningen på tabellen

Följande ordbok innehåller vyerna information 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';

Här står C för Check constraint

Hur man aktiverar/inaktiverar kontrollbegränsningen

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

Hur man släpper kontrollbegränsningen

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

Exempel på kontrollbegränsningar

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 också
ändra tabell lägg till primärnyckel oracle :primärnyckel i oracle identifierar unikt raden i tabellen. Den kan inte vara null &kan skapas vid tidpunkten för tabellskapandet eller efter att tabellen skapats
not null constraint i Oracle :not null constraint i oracle används för att framtvinga inte null-värden i kolumnen i tabellen. Kolla in hur du lägger till, släpp noll-begränsningarna
Unik nyckel i Oracle:Unik nyckel upprätthåller unik i kolumnen i tabellen och hjälper oss att snabbt identifiera raden. Oracle skapar det unika indexet för nyckeln om inget index är tillgängligt
släpp främmande nyckel begränsning oracle:Vi kan släppa begränsningen i Oracle med kommandot alter table. vi kan släppa primär, främmande nyckel, check, inte null och unik begränsning med samma kommando
delete-kommando i oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm

Rekommenderade kurser

Här är den trevliga Udemy-kursen för Oracle SQL
Oracle-Sql-Steg-för-steg :Den här kursen täcker grundläggande sql, går med, skapar tabeller och ändrar dess struktur, Skapa vy, Union, Union -allt och mycket annat . En bra kurs och måste-kurs för SQL-startare
The Complete Oracle SQL Certification Course :Detta är en bra kurs för alla som vill vara redo för SQL-utvecklare. En trevlig förklarad kurs
Oracle SQL Developer:Essentials, Tips and Tricks :Oracle Sql-utvecklarverktyget används av många utvecklare. Den här kursen ger oss tricks och lektioner om hur man effektivt använder den och blir en produktiv SQL-utvecklare
Oracle SQL Performance Tuning Masterclass 2020 :Prestandajustering är en av de kritiska och mest eftertraktade färdigheterna. Det här är en bra kurs för att lära dig om det och börja göra sql-prestandajustering


  1. SQL Server 2014 inkrementell statistik

  2. xampp MySQL startar inte

  3. Hur RandomBlob() fungerar i SQLite

  4. Transaktioner fungerar inte för min MySQL DB