sql >> Databáze >  >> RDS >> Oracle

jak používat kontrolní omezení v oracle

Úvod

Omezení kontroly Oracle se používá k vynucení pravidel integrity založených na logických výrazech, jako jsou porovnávání. Použité logické výrazy by měly vrátit booleovskou hodnotu.
Příklad
Omezení CHECK platů zaměstnanců tak, aby žádná hodnota platu nebyla větší než 100 000.
Omezení CHECK umístění oddělení, takže pouze umístění „DELHI“, „PATNA“ a „MUMBAI“ jsou povoleny.

Jak funguje omezení kontroly Oracle

  1. Definujete kontrolní omezení pro sloupec v tabulce. Check constraints je logický výraz, který je vyhodnocen jako logická hodnota true nebo false
  2. Když jsou do tabulky vkládány nebo aktualizovány řádky, Oracle zkontroluje logické výrazy.
  3. Pokud je vyhodnocena jako True, Oracle data přijme a přenese dále s vložením nebo smazáním
  4. Pokud se vyhodnotí jako nepravda, Oracle data odmítne

Důležité body týkající se kontrolního omezení

A. Kontrolní omezení lze vytvořit pro sloupec nebo skupinu sloupců.
b. Sloupec může mít jedno nebo více kontrolních omezení.
c. Pořadí, ve kterém jsou vyhodnocena omezení, není definováno
d. Nikdy nepoužívejte omezení CHECK, pokud potřebnou kontrolu může poskytnout jakýkoli jiný typ omezení integrity.
e. Při definování více omezení se ujistěte, že nejsou ve vzájemném konfliktu

Zkontrolujte omezení omezení

(1) Podmínka musí být booleovský výraz, který lze vyhodnotit pomocí hodnot v řádku, který se vkládá nebo aktualizuje.
(2) Podmínka nemůže mít
a. poddotazy nebo sekvence.
b. Funkce SQL SYSDATE, UID, USER nebo USERENV.
c. pseudo sloupce LEVEL, PRIOR nebo ROWNUM.
d. uživatelsky definovaná funkce SQL.
(3) Kontrolní omezení nemůže odkazovat na sloupce v jiných tabulkách
(4) Kontrolní omezení nelze vytvořit v pohledu Oracle

Jak vytvořit kontrolní omezení v oracle

Kontrolní omezení Oracle lze vytvořit pomocí klauzule create table nebo poté, co byla tabulka vytvořena pomocí klauzule alter table.
Nyní při vytváření tabulky lze kontrolní omezení vytvořit v syntaxi řádkového sloupce nebo mimo řádek syntaxe.

inline syntaxe

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.

Kontrolnímu omezení můžeme také dát vlastní název

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.

nesprávná syntaxe

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.

Kontrolnímu omezení můžeme také dát vlastní název

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.

Pokud se jedná o více sloupců, použijeme pouze mimořádkovou syntaxi
Pokud použijete inline syntaxi, vyvolá to chybu

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.

Nyní lze po vytvoření tabulky přidat kontrolní omezení pomocí syntaxe 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.

Jak najít kontrolní omezení v tabulce

Podle slovníku obsahují pohledy informace o omezení
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';

Zde C znamená Check constraint

Jak povolit/zakázat kontrolní omezení

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

Jak zrušit kontrolní omezení

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

Příklad kontrolních omezení

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

Také čte
alter table add primary key oracle :primární klíč v oracle jednoznačně identifikuje řádek v tabulce. Nemůže být null a může být vytvořen v době vytvoření tabulky nebo po vytvoření tabulky
not null omezení v Oracle :not null omezení v oracle se používá k vynucení nenulových hodnot ve sloupci v tabulce. Podívejte se, jak přidat, zrušit nulová omezení
Unikátní klíč v Oracle:Jedinečný klíč vynucuje jedinečnost ve sloupci v tabulce a pomáhá nám rychle identifikovat řádek. Oracle vytvoří jedinečný index pro klíč, pokud není k dispozici žádný index
zrušte omezení cizího klíče oracle:Omezení můžeme v oracle zrušit pomocí příkazu alter table. můžeme zrušit primární, cizí klíč, kontrolu, ne null a jedinečné omezení pomocí stejného příkazu
příkaz delete v oracle
https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm

Doporučené kurzy

Zde je pěkný kurz Udemy pro Oracle SQL
Oracle-Sql-Krok za krokem:Tento kurz pokrývá základní sql, spojení, vytváření tabulek a úpravu jejich struktury, vytváření zobrazení, sjednocení, sjednocení – vše a mnoho dalších věcí. . Skvělý kurz a kurz, který musíte mít pro začátečníky SQL
Úplný certifikační kurz Oracle SQL :Toto je dobrý kurz pro každého, kdo chce být Job připravený na vývojářské dovednosti SQL. Pěkně vysvětlený kurz
Oracle SQL Developer:Základy, tipy a triky :Vývojářský nástroj Oracle Sql používá mnoho vývojářů. Tento kurz nám poskytuje triky a lekce, jak jej efektivně používat a stát se produktivním vývojářem sql
Oracle SQL Performance Tuning Masterclass 2020 :Ladění výkonu je jednou z kritických a nejvyhledávanějších dovedností. Toto je dobrý kurz, jak se o tom dozvědět a začít s laděním výkonu SQL


  1. Jak vložit více řádků do MySQL

  2. Chyba při vytváření prostorové databáze. CHYBA:nelze načíst knihovnu /usr/pgsql-9.1/lib/rtpostgis-2.0.so

  3. Jak nainstalovat Microsoft SQL na Linux

  4. Vývoj modulu s Java 9 v Eclipse IDE, část 2