-- tabulka vydavatelu knih s pojmenovanym primarnim klicem vydavatel_id a
-- jmenem vydavatele, ktere musi byt vyplneno a zadano velkymi pismeny
SQL> CREATE TABLE Vydavatele (
vydavatel_id NUMBER CONSTRAINT pk_vydavatelid PRIMARY KEY,
vydavatel_jmeno VARCHAR2(50) CONSTRAINT vydavatel_upper CHECK(vydavatel_jmeno = UPPER(vydavatel_jmeno))
CONSTRAINT vydavatel_notnull NOT NULL
CONSTRAINT vydavatel_uniq UNIQUE);
Table created.
--zobrazi informace o vytvorenych integritnich omezenich vcetne jeho typu
--ze systemove tabulky 'user_constraints'
--(dalsi zajimava tabulka je 'user_cons_columns')
SQL> SELECT table_name, constraint_name, constraint_type FROM user_constraints WHERE UPPER(table_name) = 'VYDAVATELE';
TABLE_NAME CONSTRAINT_NAME C
------------------------------ ------------------------------ -
VYDAVATELE VYDAVATEL_NOTNULL C
VYDAVATELE VYDAVATEL_UPPER C
VYDAVATELE PK_VYDAVATELID P
VYDAVATELE VYDAVATEL_UNIQ U
-- vlozeni legalniho zaznamu do tabulky Vydavatele
SQL> INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (1, 'GRADA');
1 row created.
-- chyba: vlozeni zaznamu bez vyplneneho jmena
SQL> INSERT INTO Vydavatele (vydavatel_id) VALUES (3);
INSERT INTO Vydavatele (vydavatel_id) VALUES (3)
*
ERROR at line 1:
ORA-01400: cannot insert NULL into ("XSVENDA"."VYDAVATELE"."VYDAVATEL_JMENO")
-- chyba: vlozeni zaznamu bez velkych pismen:
SQL> INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (2, 'Marecek');
INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (2, 'Marecek')
*
ERROR at line 1:
ORA-02290: check constraint (XSVENDA.VYDAVATEL_UPPER) violated
-- chyba: vlozeni neunikatniho zaznamu
SQL> INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (2, 'GRADA');
INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (2, 'GRADA')
*
ERROR at line 1:
ORA-00001: unique constraint (XSVENDA.VYDAVATEL_UNIQ) violated
-- kniha_id je primarni klic. constraint pojmenovan jako pk_bookid;
-- kniha_jmeno musi byt vyplnen a unikatni. constraint neni pojmenovan;
-- nakladatel musi byt vyplnen. Prodej zahajen dle 'start_prodeje', pokud
-- neni pri vkladani vyplneno, pouzije se aktualni datum
SQL> CREATE TABLE Knihy (
kniha_id NUMBER CONSTRAINT pk_bookid PRIMARY KEY,
kniha_jmeno VARCHAR2(30) NOT NULL UNIQUE,
vydavatel_id NUMBER NOT NULL,
start_prodeje DATE DEFAULT SYSDATE);
Table created.
--pridame pozadavek na vyplneni polozky isbn a jeji unikatnost
SQL> ALTER TABLE Knihy ADD CONSTRAINT uniq_isbn isbn VARCHAR2(15) UNIQUE NOT NULL;
Table altered.
--pridame referenci na cizi klic z tabulky Vydavatele na polozku
--Vydavatele.vydavatel_id. od teto chvile bude kontrolovan vyskyt hodnoty
--Knihy.vydavatel_id v tabulce Vydavatele a tabulka Vydavatele pujde
--odstranit az po odstraneni tabulky Knihy (ktera ji referencuje)
SQL> ALTER TABLE Knihy ADD CONSTRAINT fk_publishid FOREIGN KEY (vydavatel_id) REFERENCES Vydavatele(vydavatel_id);
Table altered.
--chyba: nelze odstranit tabulku, na kterou je uvedena reference pres FOREIGN KEY
SQL> DROP TABLE Vydavatele;
DROP TABLE Vydavatele
*
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys
--vlozeni legalniho zaznamu do tabulky Knihy
SQL> INSERT INTO Knihy (kniha_id, kniha_jmeno, isbn, vydavatel_id) VALUES (1, 'Citadela', '80-5246545-321', 1);
1 row created.
--chyba: nelze vlozit zaznam do Knih pro neexistujiciho vydavatele
SQL> INSERT INTO Knihy (kniha_id, kniha_jmeno, isbn, vydavatel_id) VALUES (2, '1984', '80-032453434-12', 3);
INSERT INTO Knihy (kniha_id, kniha_jmeno, isbn, vydavatel_id) VALUES (2,
*
ERROR at line 1:
ORA-02291: integrity constraint (XSVENDA.FK_PUBLISHID) violated - parent key
not found
--chyba: nelze odstranit vydavatele, ktery je referencovan zaznamen z tabulky Knihy
SQL> DELETE FROM Vydavatele WHERE vydavatel_id = 1;
DELETE FROM Vydavatele WHERE vydavatel_id = 1
*
ERROR at line 1:
ORA-02292: integrity constraint (XSVENDA.FK_PUBLISHID) violated - child record
found
-- odstraneni omezeni na unikatnost jmena vydavatele
SQL> ALTER TABLE VYdavatele DROP CONSTRAINT vydavatel_uniq;
Table altered.
-- odstraneni tabulky Vydavatele vcetne vsech souvisejicich integritnich
-- omezeni (Knihy.fk_publishid)
SQL> DROP TABLE Vydavatele CASCADE CONSTRAINTS;
Table dropped.