-- Dokumentace k integritnim omezenim zde -- 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. -- vlozeni legalniho zaznamu do tabulky vydavatele SQL> INSERT INTO vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (1, 'BB ART'); 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 ("XDOHNAL"."VYDAVATELE"."VYDAVATEL_JMENO") -- chyba: vlozeni zaznamu bez velkych pismen: 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-02290: check constraint (XDOHNAL.VYDAVATEL_UPPER) violated -- chyba: vlozeni neunikatniho zaznamu SQL> INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (2, 'BB ART'); INSERT INTO Vydavatele (vydavatel_id, vydavatel_jmeno) VALUES (2, 'BB ART') * ERROR at line 1: ORA-00001: unique constraint (XDOHNAL.VYDAVATEL_UNIQ) violated *** Ukol1: Nastavte id v tabulce knihy jako primarni klic a nazvete jej pk_bookid. SQL> ALTER TABLE knihy ...; *** Ukol2: Nastavte vydavatel_id v tabulce knihy jako cizi klic do tabulky vydavatele a nazvete jej fk_publishid. SQL> ALTER TABLE knihy ...; *** Ukol3: Vlozte knihu s id 4 a nazvem 'Nemame na vybranou' od vydavatele 3. Lze to provest? *** Ukol4: Vlozte knihu s id 4 a nazvem 'SQL pro seniory', ktery nema vydavatele (NULL). Lze to provest? -- TODO: Vytvorit ukol na check contraint, ktery pracuje bud s null nebo vyzaduje jinou hodnotu... --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 (XDOHNAL.FK_PUBLISHID) violated - child record found --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 -- odstraneni tabulky Vydavatele vcetne vsech souvisejicich integritnich -- omezeni (Knihy.fk_publishid) SQL> DROP TABLE Vydavatele CASCADE CONSTRAINTS; Table dropped. --zobrazi informace o vytvorenych integritnich omezenich vcetne jeho typu --ze systemove tabulky 'user_constraints' --(dalsi zajimava tabulka je 'user_cons_columns', ktera zobrazuje na kterem sloupci je dane omezeni definovano) SQL> SELECT constraint_name, constraint_type FROM user_constraints WHERE UPPER(table_name) = 'VYDAVATELE'; CONSTRAINT_NAME C ------------------------------ - VYDAVATEL_NOTNULL C VYDAVATEL_UPPER C PK_VYDAVATELID P VYDAVATEL_UNIQ U --pripadne prikaz, ktery zobrazi i podminku daneho omezeni --(dalsi zajimava tabulka je 'user_cons_columns') SQL> SELECT constraint_name, constraint_type, search_condition FROM user_constraints WHERE UPPER(table_name) = 'VYDAVATELE'; --Zobrazeni sloupcu, na kterych je omezeni definovano SQL> SELECT constraint_name, column_name FROM user_cons_columns WHERE UPPER(table_name) = 'VYDAVATELE' AND UPPER(constraint_name) = 'PK_VYDAVATELID';