-- Tabulka dual: -- Syntaxe oraclu nedovoluje pouziti prikazu "select" bez klauzule "from" -- (napr. MySQL neco takoveho povoluje). Prikaz "select 1+1" je syntakticky -- nespravny. Chceme-li zapsat prikaz bez pristupu dat k tabulce muzeme uvest -- tabulku dual, ke ktere mame automaticky pristup aniz bychom ji vytvareli. SQL> SELECT 1+1 FROM dual; 1+1 ---------- 2 SQL> DESC dual; Name Null? Type ----------------------------------------- -------- ---------------------------- DUMMY VARCHAR2(1) -- chyba: do tabulky dual nemame zapisova prava (je umistena v systemove databazi, to lze zjistit selectem z tabulky all_tables) SQL> INSERT INTO dual VALUES ('A'); INSERT INTO dual VALUES ('A') * ERROR at line 1: ORA-01031: insufficient privileges -- Tabulka dual neni v nasem schematu. Pokud chceme vytvorit -- tabulku s nazvem dual v nasem schematu, nic nam v tom nebrani. SQL> CREATE TABLE dual (a number); SQL> INSERT INTO dual VALUES (1); SQL> INSERT INTO dual VALUES (2); SQL> SELECT * FROM dual; A ---------- 1 2 SQL> SELECT 1+1 FROM dual; 1+1 ---------- 2 2 SQL> SELECT 1+1 FROM sys.dual; 1+1 ---------- 2 SQL> DROP TABLE dual; -- Sekvence: -- Dokumentace k sekvencim zde -- vytvorime sekvenci se jmenem 'pokus' SQL> CREATE SEQUENCE seq_pokus; Sequence created. -- pouziti sekvence pomoci pseudosloupcu CURRVAL a NEXTVAL SQL> SELECT seq_pokus.NEXTVAL FROM dual; SQL> SELECT seq_pokus.CURRVAL FROM dual; -- Pozor: CURRVAL neni definovan drive nez zavolate NEXTVAL (z bezpecnostnich duvodu) -- pouziti sekvence v INSERT SQL> CREATE SEQUENCE seq_knihy_id START WITH 10; SQL> INSERT INTO knihy (id,nazev,vydavatel_id, isbn) VALUES (seq_knihy_id.NEXTVAL, 'Velky sef', 1, '978-80-7381-588-2'); -- Ukol c.1: Vytvorte tabulku "vytisky" evidujici vytisky knih s atributy (vytisk_id (PK), kniha_id (FK), porizeno DATE). Pouzijte referencni integritu a sekvenci pro generovani id vytisku. Sekvenci pojmenujte seq_vytisky_id. -- Ukol c.2: Vlozte novou knihu vydavatele s id 1 majici nazev 'Postrach' a isbn '978-80-7381-783-1' a dale jeji jeden vytisk. Napoveda: vyuzijte sekvence.CURRVAL -- Ukol c.3: Vytvorte omezenou sekvenci 'seq_limited' s minimalni hodnotou 3 a maximalni hodnotou 10. Co se stane po prekroceni maxima? CREATE SEQUENCE seq_limited INCREMENT BY 1 START WITH 3 MAXVALUE 10 MINVALUE 3; -- zobrazime vytvorene sekvence SQL> SELECT sequence_name, increment_by, last_number FROM user_sequences; SEQUENCE_NAME INCREMENT_BY LAST_NUMBER ------------------------------ ------------ ----------- SEQ_ZAMEST_ID 2 10 SEQ_LIMITED 1 3 -- smazani sekvence SQL> DROP SEQUENCE seq_limited;