-- 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;