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 "*/".