Prihlaseni:

aisa:/home/xdohnal$ module add oracle
aisa:/home/xdohnal$ module add gqlplus
aisa:/home/xdohnal$ gqlplus xdohnal@db10

SQL*Plus: Release 10.1.0.3.0 - Production on Mon Feb 21 15:32:37 2011

Copyright (c) 1982, 2004, Oracle.  All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning and Data Mining Scoring Engine options

SQL>

Prace s gqlplus:

Manual k SQL*Plus (v HTML) je na strance predmetu.

Nejlepsi je vytvorit si v oblibenem textovem editoru soubor s priponou
.sql (napr. cv1.sql) a v gqlplus jej spustit prikazem "@cv1". Nebo pres schranku vkladat do okna s gqlplus.

Zmena hesla:

Prikaz password:

SQL> password
Changing password for XDOHNAL
Old password:
New password:
Retype new password:
Password changed

Nebo prikazem alter user:

SQL> alter user xdohnal identified by "1 2";

User altered.


Vytvoreni tabulky:

CREATE TABLE schema.table (column datatype [DEFAULT expr], ...);

Datove typy:

char(size) - retezec fixni delky o velikosti size; size nejvyse 2000 bytu
varchar2(size) - retezec variabilni delky, maximalne o velikosti size, pricemz 
		 size je nejvyse 4000 bytu (tj. ve Win1250 4000 znaku)
          - oba typy pouzivaji kodovani databaze
              
nchar(size) - dtto ale s UNICODE znaky (kodovani UTF-8 nebo AL16UTF16), max. je 2000 bytu
nvarchar2(size) - dtto ale s UNICODE znaky (kodovani UTF-8 nebo AL16UTF16), size je max. 4000 bytu (v UTF16 tedy 2000 znaku)
          - v obou typech lze ulozit libovolny UNICODE znak

Aktualni kodovani databaze:
SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';


long - retezec o velikosti az 2GB
clob - znakova velka data, maximalne 4GB*db_block_size
nclob - znakova velka data v UNICODE, maximalne 4GB*db_block_size

raw(size) - binarni data o velisti size (max 2000 bytes)
long raw - binarni data az 2GB velka
blob - binarni velka data, maximalne 4GB*db_block_size

date - datum a cas (implicitni tvar DD-MON-YY), bez casove zony, Oracle uklada cas s presnosti na cele vteriny.
     - implicitni format vypisu lze ovlivnit nastavenim promenne NLS_DATE_FORMAT 
	   (napr. alter session set NLS_DATE_FORMAT="DD/MM/YYYY HH24:MI:SS";)
	 - format vypisu lze zmenit i pomoci promenne NLS_TERRITORY 
	   (napr. alter session set  NLS_TERRITORY="CZECH REPUBLIC";)
	   Toto lze realizovat take nastavenim NLS_LANG, napr. na "CZECH.CZECH REPUBLIC.UTF8".
	 - pro zjisteni aktualniho systemoveho data a casu pouzijte SYSDATE
NLS_* promenne
timestamp(prec) - datum a cas, u casu lze urcit presnost (prec) v poctu desetinnych mist vteriny (0-9) 
                - pokud presnost neurcite, pouzije se hodnota 6
timestamp(prec) with time zone - datum a cas vcetne ukladani casovych zon
timestamp(prec) with local time zone - datum a cas je konvertovan pred ulozenim do lokalni casove zony databaze, tj. zona se neuklada

Specifikace hodnot data a casu:
 Pro datum lze pouzit:
   - DATE 'YYYY-MM-DD', napr. DATE '2011-12-31'
   - obecnejsi zapis: TO_DATE(retezcova_hodnota, formatovani), napr. TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')
 Pro casove razitko lze pouzit:
   - bez casoveho pasma: TIMESTAMP '1997-01-31 09:26:50.124'
   - s casovym pasmem: TIMESTAMP '1997-01-31 09:26:56.66 +01:00' popr. TIMESTAMP '1997-01-31 09:26:56.66 CET'

Zmena casoveho pasma jde realizovat pomoci AT TIME ZONE 'zona':
   - TIMESTAMP '1997-01-31 09:26:56.66 US/Pacific' AT TIME ZONE 'CET'

Zjisteni aktualniho data a casu:
   - Datum: SYSDATE nebo CURRENT_DATE
   - Casove razitko: SYSTIMESTAMP nebo CURRENT_TIMESTAMP (obe pouzivaji i casovou zonu)
   - Casove razitko bez zony: LOCALTIMESTAMP (resp. s casovou zonou db serveru)

number(precision, scale) - cislo s platnymi ciframi precision (1-38), zaohrouhlene na
                           rozsah scale (-84 az 127)
integer,int =number(38)
float(size), double precision, real - realna cisla (ekvivalentni s NUMBER)

Actual     Specified As Stored As
7456123.89 NUMBER       7456123.89
7456123.89 NUMBER(9)    7456124
7456123.89 NUMBER(9,2)  7456123.89
7456123.89 NUMBER(9,1)  7456123.9
7456123.89 NUMBER(6)    exceeds precision
7456123.89 NUMBER(7,-2) 7456100

Actual      Specified As Stored As
.01234      NUMBER(4,5) .01234
.00012      NUMBER(4,5) .00012
.000127     NUMBER(4,5) .00013
.0000012    NUMBER(2,7) .0000012
.00000123   NUMBER(2,7) .0000012

NUMBER(9) == NUMBER(9,0)
NUMBER == NUMBER(p_max,s_max), kde jsou p_max a s_max jsou maximalni hodnoty pro danou verzi Oracle.

Priklad: 
SQL> CREATE TABLE cd (id number, nazev varchar2(50), datum date, rating float);

Table created.


Vkladani dat do tabulky:

INSERT INTO schema.table VALUES (hodnota1, hodnota2, ...);

Priklad:

SQL> insert into cd values (1, '9mm', '02-JAN-02', 9.5);

1 row created.


Mazani dat z tabulky:

DELETE FROM schema.table WHERE ...;

Priklad:

SQL> delete from cd where id=1;

1 row deleted.


Zruseni tabulky:

DROP TABLE schema.table;

SQL> drop table cd
  2  ;

Table dropped.


*** Ukol1:
Vytvorte si tabulku "knihy", ktera bude obsahovat nasledujici atributy:
- id            typu cislo
- nazev         typu retezec max. delky 20 znaku
- vydavatel_id  typu cislo
- vydana        typu datum

Schema vytvorene tabulky si muzete snadno zjistit pomoci:
SQL> desc knihy


*** Ukol2:
Vlozte nasledujici dve knihy:
1/ Kniha "Osm cernych koni" s id 1 od vydavatele 1 vydanou dne 21.9.2011
2/ Kniha "Profesional" s id 2 od vydavatele 1, ktera jeste nevysla (tj. NULL)

Zobrazte si obsah cele tabulky.


Schema tabulky lze i menit:

ALTER TABLE schema.table ...


*** Ukol3: 
Do tabulky knihy pridejte novy atribut ISBN typu retezec max. delky 20 znaku.

SQL> ALTER TABLE knihy ...

Zobrazte si obsah cele tabulky. Jake hodnoty jsou ve sloupci ISBN?



Uprava dat v tabulce:

UPDATE schema.table SET column1=expr1[,column2=expr2,...] WHERE ...;


*** Ukol4: 
Nastavte ISBN kniham:
1/ kniha s ID 1 ma mit 978-80-7381-881-4
2/ kniha s ID 2 ma mit 978-80-7461-086-8 


*** Ukol5: 
Nastavte defaultni hodnotu atributu "vydana" na aktualni systemove datum:

SQL> ALTER TABLE knihy ...;


*** Ukol6:
Vlozte nasledujici novou knihu
 - "Divka za zrcadlem" s id 3 od vydavatele 1, kde datum vydani ponechte vyplnit databazi.

Pozn: Pri vkladani lze urcit sloupce, pro ktere uvadite hodnoty:
      INSERT INTO schema.table (column1,column2,...) VALUES (hodnota1, hodnota2, ...);


Zobrazte si obsah cele tabulky a zkontrolujte datum noveho zaznamu (melo by byt dnesni ((-: ).



Poznamky v SQL:
Jeden radek: "--" na zacatku radku znamena ignorovani tohoto radku.
Jinak funguji komentare jako v C-ecku tj. Zacatek "/*" a konec "*/".