Omezení CHECK
Omezení CHECK uplatní specifikované omezení sloupce tak, aby obsahoval pouze určitou množinu hodnot. Například pouze kladná nebo záporná čísla či přiměřená data. Příkaz CHCEK implicitně povoluje prázdné hodnoty. V následujícím kódu je uveden příklad, který používá celou řadu klauzulí CHECK, jejichž význam nejprve rozeberu.Stat - Omezuje délku sloupce na tři znaky. Datový typ CHAR () vyplní pole prázdnými hodnotami, proto je tento sloupec zbaven prázdných znaků pomocí funkce "trim" dříve, než se zjistí jeho délka.
Vek - Omezení hodnoty pouze na kladná čísla.
Pohlavi - omezení hodnot tohoto sloupce pouze na písmena "M" a "Z".
Table - Poslední podmínka CHECK zajistí, aby tabulka neakceptovala řádky, kde sloupce "jmeno" obsahuje hodnotu "Robert" a sloupec "Prijmeni" hodnotu "Habrman" bez ohledu na to, jestli je zapsáno velkými nebo malými písmeny či jejich kombinací. Toto omezení je potřeba udělat na úrovni tabulky. Kdybychom jej implementovali na úrovni sloupce (jmeno), byly by odmítnuty všechny pokusy při vložení příslušného jména. Místo toho chceme, aby bylo zabráněno vložení kombinace hodnot sloupců "jmeno" a "prijmeni".
====== Vytvoření tabulky "zamestnanec" =======
CREATE TABLE zamestnanec (
Jmeno CHAR (15),
Prijmeni CHAR (20),
Mesto CHAR (15)
Stat CHAR (3) CHECK (lenght (trim(state)) = 3 ),
Vek INTEGER CHECK (vek > 0),
Pohlavi CHAR (1) CHECK (gender IN ( 'M' , 'Z')),
Nastup DATE CHECK (nastup BETWEEN '2000-01-01' AND CURRENT_DATE),
CHECK (upper (trim(jmeno)) != 'Robert' OR upper (trim(prijmeni)) != 'Habrman')
);
==== Odmitnutí dotazu INSERT ========
INSERT INTO zamestnanec
VALUES ('Robert' , 'Habrman' , 'Ostrava', 'CZE' , 'M' , 'CURRENT_DATE');
ERROR: Rejected due to CHECK constraint zamestnanec
====== Akceptovani dotazu INSERT ========
INSERT INTO zamestnanec
VALUES ('Banant' , 'Banan' , 'Ostrava', 'CZE' , 'M' , 'CURRENT_DATE');
Autor: Robert Habrman