5/28/2018 Bazy Danych - Robert Chwastek
1/81
Robert Chwastek
Bazy danych
5/28/2018 Bazy Danych - Robert Chwastek
2/81
Bazy danych Robert Chwastek
2
w Krakowie.
Copyright (c) Robert Chwastek, Krakw 1996.
5/28/2018 Bazy Danych - Robert Chwastek
3/81
Bazy danych Robert Chwastek
3
1.
E ......................................................... ........................................................... ........................ 5
1.1. DEFINICJA BAZY DANYCH...............................................................................................................................................51.2. S ...........................................................................................................................61.3. TRANSAKCJE ..................................................................................................................................................................61.4. J ........................................................................................................................7
2. TYPY DANYCH ...............................................................................................................................................................8
2.1. SPIS TYPW DANYCH......................................................................................................................................................82.2. TYP NUMERYCZNY .........................................................................................................................................................82.3. KONWERSJE TYPW .....................................................................................................................................................102.4. W .........................................................................................................................................................10
3. MODEL RELACYJNY..................................................................................................................................................12
3.1. STRUKTURY DANYCH W MODELU RELACYJNYM...........................................................................................................123.2. R SQL ......................................................... ............................................................ ........................... 133.3. S SQL ............................................................ ............................................................ ................. 14
3.3.1. Definicje podstawowe.......................................................... ................................................. ................................. 14
3.3.2. Rozkaz CREATE TABLE....................................................... .......................................................... ....................... 15
3.3.3. Rozkaz DROP .......................................................... .................................................... .......................................... 163.3.4. Rozkaz INSERT..................................................... ....................................................... .......................................... 17
3.3.5. Rozkaz DELETE ........................................................... ........................................................ ................................. 18
3.3.6. Rozkaz CREATE SEQUENCE .................................................... .................................................... ....................... 19
3.3.7. Rozkaz SELECT ......................................................... ................................................... ......................................... 21
3.3.8. Rozkaz UPDATE............................................................. ...................................................... ................................. 22
3.3.9. Rozkaz RENAME ..................................................... ....................................................... ....................................... 23
3.3.10. Rozkaz ALTER TABLE ................................................... ........................................................... ....................... 24
3.3.11. Rozkaz CREATE INDEX ..................................................................................................................................25
3.3.12. Rozkaz CREATE VIEW .................................................... .................................................. .............................. 27
3.3.13. Rozkaz COMMIT........................................................ ..................................................... ................................. 28
3.3.14. Rozkaz ROLLBACK............................... ............................................................ ............................................... 28
3.3.15. Rozkaz SAVEPOINT........... ........................................................... ............................................ ....................... 283.3.16. Rozkaz SET TRANSACTION.................................................... ................................................. ....................... 29
3.4. OPERACJE RELACYJNE..................................................................................................................................................303.4.1. Selekcja ........................................................... ............................................................ ........................................... 30
3.4.2. Projekcja.................. ............................................................ ........................................................... ....................... 31
3.4.3. Produkt ..................................................... ............................................................ .............................................. ...32
3.4.4.
..............................................................................................................................................................32
3.4.5.
........................................................ ............................................................ ...................... 33
3.4.6. Grupowanie ........................................................... .................................................... ............................................ 34
3.4.7.
..................................................................................................................35
3.5. PODZAPYTANIA ............................................................................................................................................................353.6. WIDOKI (PERSPEKTYWY)..............................................................................................................................................373.7. TRANSAKCJE ................................................................................................................................................................38
3.8. NORMALIZACJA RELACJI ..............................................................................................................................................383.8.1. Cele normalizacji..... ........................................................... ............................................................ ....................... 38
3.8.2. Pierwsz
............................................................ ............................................................ ............. 39
3.8.3. Definicje pomocnicze... ............................................................ ................................................................ .............. 40
3.8.4.
...................................................... ............................................................ ....................... 44
3.8.5. .................................................... ............................................................ ....................... 46
3.8.6. Czwarta pos
................................................... ............................................................ ....................... 47
3.8.7.
...........................................................................................................................................48
3.8.8. Podsumowanie.... ........................................................... .............................................. .......................................... 48
4.
IA..........................................................................................................................................50
4.1. OPERATORY .................................................................................................................................................................504.1.1. Operatory arytmetyczne............................................ ............................................................ ................................. 50
4.1.2. Operatory znakowe...................................................... .................................................. ........................................ 50
4.1.3. Operatory porwnania .......................................................... ........................................... ..................................... 51
4.1.4. Operatory logiczne .......................................................... ..................................................... ................................. 52
4.1.5.
...................................................... ............................................................ ...................... 53
5/28/2018 Bazy Danych - Robert Chwastek
4/81
Bazy danych Robert Chwastek
4
4.2. W ........................................................ ............................................................ ............................................. 534.3. WARUNKI.................................................. ............................................................ ....................................................... 55
5. STANDARDOWE FUNKC
...................................................... ....................................................... 57
5.1. FUNKCJE NUMERYCZNE .......................................................... ............................................................ ......................... 575.2. FUNKCJE ZNAKOWE....................................................... ............................................................ ................................... 575.3. FUNKCJE GRUPOWE....................................................... ............................................................ ................................... 595.4. FUNKCJE KONWERSJI..................................................... ............................................................ ................................... 605.5. FUNKCJE OPERACJI NA DATACH ........................................................ ............................................................ ............... 615.6. INNE FUNKCJE ..................................................... ............................................................ ............................................. 635.7. FORMATY ZAPISU DANYCH...................................................... ............................................................ ......................... 64
5.7.1. Formaty numeryczne ....................................................... .................................................. .................................... 64
5.7.2. Formaty dat .................................................... .......................................................... ............................................. 64
6. PROGRAMOWANIE PROCEDURALNE - PL/SQL.................................................................................................66
6.1. WPROWADZENIE ........................................................... ............................................................ ................................... 666.2. STRUKTURA BLOKU....................................................... ............................................................ ................................... 676.3. PROCEDURY I FUNKCJE ........................................................... ............................................................ ......................... 676.4. KURSORY.................................................. ............................................................ ....................................................... 686.5. REKORDY.................................................. ............................................................ ....................................................... 70
6.6. O
........................................................ ............................................................ ................................... 716.6.1. Informacje podstawowe......... ............................................................ .......................................... .......................... 716.6.2.
.................................................... ............................................................ ......................... 73
6.6.3.
................................................... ............................................................ ................................... 73
6.6.4. ........................................................ ....................................................... 74
6.7. R PL/SQL ....................................................... ............................................................ ....................... 756.7.1. Rozkaz OPEN ......................................................... ..................................................... .......................................... 75
6.7.2. Rozkaz CLOSE................................................ ............................................................ ........................................... 76
6.7.3. Rozkaz FETCH ..................................................... ........................................................ ......................................... 76
6.7.4. Rozkaz SELECT ... INTO......................................................... .................................................... .......................... 77
6.7.5. Rozkaz IF ........................................................ ........................................................ ............................................... 77
6.7.6. Rozkaz LOOP ................................................... ........................................................... .......................................... 78
6.7.7. Rozkaz EXIT .................................................... .......................................................... ............................................ 80
6.7.8. Rozkaz GOTO................................................... ........................................................... .......................................... 80
7. LITERATURA................................................................................................................................................................ 81
5/28/2018 Bazy Danych - Robert Chwastek
5/81
Bazy danych Robert Chwastek
5
1.
1.1. Definicja bazy danychW pewnym uproszczeniu przez
danych, a przez system bazy danych
rozumiany jako:
jest opis semantyki (znaczenia) danych, przechowywanych w bazie. System bazy danych modelu danych. Przez model danych rozumiemy rzeczywistego, istotnych z punktu widzenia danego zastosowania tworzy schemat bazydanych. Baza danych jest modelem logicznie spjnym celowi. W
aplikacjami tym celu aplikacje.
Schemat jest opisem struktury (formatu) przechowywanych danych oraz wzajemnych
5/28/2018 Bazy Danych - Robert Chwastek
6/81
Bazy danych Robert Chwastek
6
1.2. danych (SZBD) jest to zestaw programw
jest oprogramowaniem oglnego przeznaczenia. System bazy danych
1.3. Transakcje
przypadku niepowodzenia ktrejkolwiek z nich wycofuje instrukcje uprzednio wykonane.
5/28/2018 Bazy Danych - Robert Chwastek
7/81
Bazy danych Robert Chwastek
7
1.4.
definiowanie struktury danych przechowywanych w bazie, czyli tworzenie schematuimplementacyjnego
transakcjami (np. zatwierdzanie lub wycofywanie)
zgodnych z podanymi warunkami
5/28/2018 Bazy Danych - Robert Chwastek
8/81
Bazy danych Robert Chwastek
8
2. Typy danych
2.1. Spis typw danych
Typ Opis
char(size)
character Synonim do charvarchar(size) W aktualnej wersji ORACLEa jest to synonim do char, konieczne jest
date Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e.
long
long varchar synonim do longraw(size)
long raw szesnastkowej.
rowid przechowywana, ale obliczana na podstawie informacji o fizycznym
ROWIDTOCHAR.
number 10-129 do 9.99 * 10124
2.2. Typ numeryczny
trzech sposobw:
number number (precyzja) number (precyzja, skala)
5/28/2018 Bazy Danych - Robert Chwastek
9/81
Bazy danych Robert Chwastek
9
-84 do 127.
W momencie definiowania kolumny numerycznej dobrym zwyczajem jest
9.87E-2 oznacza 9.87 * 10-2.
5/28/2018 Bazy Danych - Robert Chwastek
10/81
Bazy danych Robert Chwastek
10
Specyfikacja Typ Precyzja Skala
number number 38 nullnumber(*) number 38 nullnumber(*, s) number 38 s
number(p) number p 0number(p,s) number p sdecimal number 38 0decimal(*) number 38 0decimal(*, s) number 38 sdecimal(p) number p 0decimal(p, s) number p sinteger number 38 0smallint number 38 0
float number 38 nullfloat(*) number 38 nullfloat(b) number b nullreal number 63 binary (18 decimal) nulldouble precision number 38 null
2.3. Konwersje typw
Z typu Do typu
char number datechar TO_NUMBER TO_DATE
number TO_CHAR TO_DATEdate TO_CHAR
2.4.
5/28/2018 Bazy Danych - Robert Chwastek
11/81
Bazy danych Robert Chwastek
11
5/28/2018 Bazy Danych - Robert Chwastek
12/81
Bazy danych Robert Chwastek
12
3. Model relacyjny
podstawowych elementw: relacyjnych struktur danych
bazy danych 3.1. Struktury danych w modelu relacyjnym
nu
bazach danych relacja przedstawiana jest w postaci tabeli. Relacja jest zbiorem krotek
5/28/2018 Bazy Danych - Robert Chwastek
13/81
Bazy danych Robert Chwastek
13
jedna jak i druga terminologia.
zbir encji wraz z atrybutami
zabezpieczenie przed tym powtrzeniem jest realizowane poprzez pola kluczowe. Wiersze
tabeli.
Unikaj powtarzania informacji w bazie danych (normalizacja).3.2. QL
Rozkaz Typ Opis
ALTER TABLE DDL
CREATE INDEX DDL Tworzy indeks dla tabeliCREATESEQUENCE
DDL
unikalnych identyfikatorw w tabelachCREATE TABLE DDL
przestrzeni dla danych
5/28/2018 Bazy Danych - Robert Chwastek
14/81
Bazy danych Robert Chwastek
14
CREATE VIEW DDL innych widokw
DELETE DML DROP obiekt DDL INSERT DML Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku
RENAME DDL SELECT DML Wykonuje zapytanie. Wybiera wiersze i kolumny z jednejlub kilku tabel
UPDATE DML Zmienia dane w tabeliCOMMIT DML ROLLBACK DML
punktu.SAVEPOINT DML Zaznacza punkt, do ktrego mozliwe jest wykonanie
rozkazu ROLLBACK
SETTRANSACTION DDL odczytu).
3.3.
3.3.1. Definicje podstawowe
napisanych w ten sposb aplikacji.
ORACLEa przedstawia tabela:
access add all alter and any
as asc audit between by charcheck cluster column comment compress connectcreate current date dba decimal defaultdelete desc distinct drop else exclusiveexists file float for from grantgraphic group having identified if immediatein increment index install initial insertinteger intersect into is level likelock long maxextents minus mode modify
noaudit nocompress not nowait null numberof offline on online option ororder pctfree prior privileges public raw
5/28/2018 Bazy Danych - Robert Chwastek
15/81
Bazy danych Robert Chwastek
15
rename resource revoke row rowid rownumrows select session set share sizesmallint start successful synonym sysdate tablethen to trigger uid union uniqueupdate user validate values varchar vargraphic
view whenever where with
7E2 = 7 * 10225e-03 = 25 * 10-3
256K = 256 * 10241M = 1 * 1048576 3.3.2. Rozkaz CREATE TABLE
CREATE TABLE [user.]table
( {column_element | table_constraint}
[, {column_element | table_constraint} ] ... )
[ PCTFREE n ] [ PCTUSED n ][ INITTRANS n ] [ MAXTRANS n ]
[ TABLESPACE tablespace ][ STORAGE storage ]
[ CLUSTER cluster (column [, column] ...) ]
[ AS query ]
Parametry:
5/28/2018 Bazy Danych - Robert Chwastek
16/81
Bazy danych Robert Chwastek
16
query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie
sama jak liczba kolumn w zapytaniu.
CREATE TABLE pracownicy( nr_pracownika NUMBER NOT NULL PRIMARY KEY,
imie CHAR(15) NOT NULL CHECK (imie = UPPER(imie)),
nazwisko CHAR(25) NOT NULL CHECK (nazwisko = UPPER(nazwisko)),
nr_wydzialu NUMBER (3) NOT NULL
);
3.3.3. Rozkaz DROP
DROP object_type [user.]object
poszczeglnych typw obiektw: DROP CLUSTER [user.]cluster [INCLUDING TABLES]- kasowanie
DROP [PUBLIC] DATABASE LINK link
DROP INDEX [user.]index- kasowanie indeksu. DROP [PUBLIC] ROLLBACK SEGMENT segment- kasowanie segmentu
tylko administrator bazy danych.
5/28/2018 Bazy Danych - Robert Chwastek
17/81
Bazy danych Robert Chwastek
17
DROP SEQUENCE [user.]sequence- kasowanie sekwencji. DROP [PUBLIC] SYNONYM [user.]synonym- usuwanie synonimu. Synonim
DROP TABLE [user.]table
DROP TABLESPACE tablespace [INCLUDING CONTENTS]- usuwanie przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie
DROP VIEW [user.]view
3.3.4. Rozkaz INSERT
INSERT INTO [user.]table [ (column [, column] ...) ] { VALUES (value [, value] ...) | query }
Parametry:
UPDATE.
Opis:
5/28/2018 Bazy Danych - Robert Chwastek
18/81
Bazy danych Robert Chwastek
18
INSERT INTO pracownicy VALUES
(50, JAN, KOWALSKI, 3);
INSERT INTO ksiazki (tytul, autor, miejsce)
SELECT 'Pan Tadeusz', autor_nr, miejsce_nr
FROM autorzy, miejsca
WHERE nazwisko = 'Mickiewicz' AND miejsce = 'lewa polka'
;
3.3.5. Rozkaz DELETE
DELETE [FROM] [user.]table [alias] [WHERE condition]
Parametry:
Opis:
Skasowanie wszystkich wierszy w tabeli pracownicy:DELETE FROM pracownicy ;
numerem 2:DELETE FROM ksiazki WHERE autor = 2 ;
5/28/2018 Bazy Danych - Robert Chwastek
19/81
Bazy danych Robert Chwastek
19
3.3.6. Rozkaz CREATE SEQUENCE
przynajmniej uprawnienia RESOURCE w conajmniej jednej przestrzeni tabel.
CREATE SEQUENCE [user.]sequence [INCREMENT BY n]
[START WITH n] [MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE n | NOCACHE] [ORDER | NOORDER]
Parametry:
cykl generacji numerw.
5/28/2018 Bazy Danych - Robert Chwastek
20/81
Bazy danych Robert Chwastek
20
MAXVALUE - MINVALUE.
do generacji kluczy pierwotnych.
Opis:
sequence.NEXTVAL
sequence.CURRVAL
podzapytaniach z klauzulami ORDER BY, GROUP BY i HAVING w rozkazie SELECT z operatorem ustawienia (UNION, INTERSECT, MINUS)
5/28/2018 Bazy Danych - Robert Chwastek
21/81
Bazy danych Robert Chwastek
21
CREATE SEQUENCE eseq INCREMENT BY 10 ;
INSERT INTO pracownicy
VALUES (eseq.NEXTVAL, Jan, Kowalski, 3) ;
3.3.7. Rozkaz SELECT
(DBA).
SELECT [ALL | DISTINCT] {* | table.* | expr [c_alias] }
[, { table.* | expr [c_alias] } ] ... FROM [user.]table [t_alias] [, [user.]table [t_alias]] ...
[ WHERE condition ]
[ CONNECT BY condition [START WITH condition] ] [ GROUP BY expr [. Expr] ... [HAVING condition] ]
[ {UNION | INTERSECT | MINUS} SELECT ...]
[ ORDER BY {expr | position} [ASC | DESC]
[, {expr | position} [ASC | DESC]] ] ... [ FOR UPDATE OF column [, column] ... [NOWAIT] ]
Parametry:
pokazane.
miejscu zapytania.
SELECT).
5/28/2018 Bazy Danych - Robert Chwastek
22/81
Bazy danych Robert Chwastek
22
SELECT, a nie na nazwie.
Opis:
SELECT imie, nazwisko FROM pracownicy ;
SELECT tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce
FROM ksiazki, autorzy, miejsca
WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr
;
3.3.8. Rozkaz UPDATE
UPDATE [user.]table [alias]
SET column = expr [, column = expr] ... [ WHERE condition ]
5/28/2018 Bazy Danych - Robert Chwastek
23/81
Bazy danych Robert Chwastek
23
lubUPDATE [user.]table [alias]
SET (column [, column] ...) = (query)
[, column [, column] ...) = (query) ] ... [ WHERE condition ]
Parametry:
rozkazu.
Opis:
UPDATE pracownicy
;
3.3.9. Rozkaz RENAME
5/28/2018 Bazy Danych - Robert Chwastek
24/81
Bazy danych Robert Chwastek
24
RENAME old TO new
Parametry:old - aktualna nazwa tabeli, widoku lub synonimu
Opis:
CREATE TABLE temporary (new_column_name)
AS SELECT old_column_name FROM table ;
DROP TABLE table ;
RENAME temporary TO table ;
RENAME wydzialy TO jednostki ;
3.3.10. Rozkaz ALTER TABLE
dodaje kolumny i warunki modyfikuje definicje kolumn jak typy i warunki usuwa warunki
ALTER TABLE [user.]table
[ADD ( {column_element | table_constraint}
[, {column_element | table_constraint}] ...) ] [MODIFY (column_element [,column_element] ...)]
[DROP CONSTRAINT constraint] ... [PCTFREE integer] [PCTUSED integer]
[INITTRANS integer] [MAXTRANS integer]
[STORAGE storage] [BACKUP]
Parametry:
5/28/2018 Bazy Danych - Robert Chwastek
25/81
Bazy danych Robert Chwastek
25
wykonywania rozkazu ALTER TABLE.
Opis:
wierszy.
rozmiar typ danych NOT NULL
lko wtedy, gdy wszystkie
jest rozmiar kolumny zadeklarowanej jako NOT NULL i w klauzuli MODIFY nie poda
ALTER TABLE pracownicy ADD (placa NUMBER(7, 2))
;
ALTER TABLE pracownicy
MODIFY (placa NUMBER(9, 2));
3.3.11. Rozkaz CREATE INDEX
danej tabeli lub administrator (DBA).
CREATE [UNIQUE] INDEX index ON
{table(column [ASC|DESC][, column [ASC|DESC]]...) |
5/28/2018 Bazy Danych - Robert Chwastek
26/81
Bazy danych Robert Chwastek
26
CLUSTER cluster} [INITTRANS n] [MAXTRANS n]
[TABLESPACE tablespace]
[STORAGE storage] [PCTFREE n]
[NOSORT]
Parametry:
column - nazwa kolumny w tabeli.
indeksu.
Opis:
Jeden element
do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie
pojedynczej kolumny B lub C.
CREATE INDEX i_prac_imie ON pracownicy (imie) ;
5/28/2018 Bazy Danych - Robert Chwastek
27/81
Bazy danych Robert Chwastek
27
3.3.12. Rozkaz CREATE VIEW
co najmniej uprawnienia SELECT lub administrator.
CREATE VIEW [user.]view [(alias [, alias] ...)]
AS query [ WITH CHECK OPTION [CONSTRAINT constraint] ]
Parametry: view - nazwa tworzonego widoku
ani FOR UPDATE.
Opis:
Widok jest logicznym oknem dla jednej lub kilku tabel. W widok nie przechowuje danych - jest on przeznaczony do pokazywania danych
zawartych w innych tabelach.
gdy zapytanie na ktrym bazuje widok zawiera:klauzule GROUP BY, CONNECT BY lub START WITH
try posiada pseudokolumny
5/28/2018 Bazy Danych - Robert Chwastek
28/81
Bazy danych Robert Chwastek
28
zmiany nazwy kolumny bez zmiany rzeczywistych danych zapisanych w tabeli.
CREATE VIEW bibl AS SELECT ksiazki.tytul, autorzy.imie,
autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca
WHERE ksiazki.autor = autorzy.autor_nr
AND ksiazki.miejsce = miejsca.miejsce_nr WITH CHECK OPTION CONSTRAINT chkopt
;
3.3.13. Rozkaz COMMIT
COMMIT [WORK]
Opis: a
bazie danych.
3.3.14. Rozkaz ROLLBACKROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ]
Parametry: savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji.Opis: klauzuli TO) lub poczatku transakcji (bez klauzuli TO).
ROLLBACK ;
ROLLBACK TO SAVEPOINT SP5 ;
3.3.15. Rozkaz SAVEPOINTSAVEPOINT savepoint
5/28/2018 Bazy Danych - Robert Chwastek
29/81
Bazy danych Robert Chwastek
29
Parametry: savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany
rozkaz
Opis:
UPDATE pracownicy
SET placa_podstawowa = 2000
WHERE nazwisko = Kowalski;
SAVEPOINT Kow_plac;
UPDATE pracownicy
SET placa_podstawowa = 1500
WHERE nazwisko = Nowak;
SAVEPOINT Now_plac;
SELECT SUM(placa_podstawowa) FROM pracownicy;ROLLBACK TO SAVEPOINT Kow_plac;
UPDATE pracownicy SET placa_podstawowa = 1300
WHERE nazwisko = Nowak
;
COMMIT;
3.3.16. Rozkaz SET TRANSACTIONSET TRANSACTION { READ ONLY }
Parametry: Opis:
5/28/2018 Bazy Danych - Robert Chwastek
30/81
Bazy danych Robert Chwastek
30
3.4. Operacje relacyjne
warunki; 3.4.1. Selekcja
Operacja podzbiorem poziomym.
SELECT * FROM osoby;
spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie. SELECT * FROM osoby
;
SELECT * FROM osoby ;
5/28/2018 Bazy Danych - Robert Chwastek
31/81
Bazy danych Robert Chwastek
31
3.4.2. Projekcja
podzbiorem pionowym.
SELECT Pesel, Nazwisko FROM osoby
5/28/2018 Bazy Danych - Robert Chwastek
32/81
Bazy danych Robert Chwastek
32
;
3.4.3. Produkt
SELECT * FROM R1, R2;
Operacja znajd
3.4.4.
5/28/2018 Bazy Danych - Robert Chwastek
33/81
Bazy danych Robert Chwastek
33
SELECT.SELECT imie, nazwisko, tytul FROM autorzy, ksiazki
WHERE autorzy.nazwisko = Mickiewicz and
autorzy.nr = ksiazki.autor;
3.4.5.
3.4.5.1. Unia
SELECT imie, nazwisko FROM pracownicy
UNION
SELECT imie, nazwisko FROM wlasciciele ;
3.4.5.2. PrzekrjPrze
bazowych.
5/28/2018 Bazy Danych - Robert Chwastek
34/81
Bazy danych Robert Chwastek
34
SELECT nazwisko FROM pracownicyINTERSECT
SELECT nazwisko FROM wlasciciele ;
3.4.5.3. Operacj
niej zatrudnieni:SELECT imie, nazwisko FROM wlasciciele
MINUSSELECT imie, nazwisko FROM pracownicy ;
3.4.6. Grupowanie
Klauzu SELECT stanowisko, avg(placa_podstawowa)
FROM pracownicy
GROUP BY stanowisko ;
a grupy. SELECT stanowisko, avg(placa_podstawowa)
FROM pracownicy WHERE stanowisko != KIEROWCA
GROUP BY stanowisko ;
stanowiska:SELECT wydzial, stanowisko, avg(placa_podstawowa) FROM pracownicy
GROUP BY nr_wydzialu, stanowisko ;
SELECT stanowisko, max(placa_podstawowa)
FROM pracownicy
5/28/2018 Bazy Danych - Robert Chwastek
35/81
Bazy danych Robert Chwastek
35
GROUP BY stanowisko HAVING max(placa_podstawowa) > 3000 ;
3.4.7.
1.SELECT i WHERE2.GROUP BY3.HAVING4.ORDER BY3.5. Podzapytania
dwa rodzaje: podzapytania proste (nazywane po prostu podzapytaniem) - podzapytanie jest
wykonywane przed
SELECT nazwisko FROM pracownicy
WHERE placa_podstawowa =
(SELECT min(placa_podstawowa) FROM pracownicy)
;
SELECT nazwisko, nr_wydzialu
FROM pracownicy
WHERE placa_podstawowa IN (SELECT min(placa_podstawowa)
FROM pracownicy
GROUP BY nr_wydzialu);
5/28/2018 Bazy Danych - Robert Chwastek
36/81
Bazy danych Robert Chwastek
36
operatora IN.
SELECT nr_wydzialu, avg(placa_podstawowa)
FROM pracownicy
GROUP BY nr_wydzialu HAVING avg(placa_podstawowa) >
(SELECT avg(placa_podstawowa)
FROM pracownicy
WHERE nr_wydzialu = 30);
Podzapytanie skorelowane jest zapytaniem zagnie dla
SELECT imie, nazwisko, placa_podstawowa, nr_wydzialu
FROM pracownicy pracownik
WHERE placa_podstawowa > (SELECT avg(placa_podstawowa)
FROM pracownicy
WHERE nr_wydzialu = pracownik.nr_wydzialu);
5/28/2018 Bazy Danych - Robert Chwastek
37/81
Bazy danych Robert Chwastek
37
3.6. Widoki (perspektywy)
proste
danych zawartych w widoku.Widok
wszystkich systemach).
CREATE VIEW personaliaAS
SELECT imie, nazwisko
FROM pracownicy;
opisie rozkau CREATE VIEW:
CREATE VIEW bibl
AS SELECT ksiazki.tytul, autorzy.imie,
autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca
WHERE ksiazki.autor = autorzy.autor_nr
AND ksiazki.miejsce = miejsca.miejsce_nr;
5/28/2018 Bazy Danych - Robert Chwastek
38/81
Bazy danych Robert Chwastek
38
3.7. Transakcje
racji.
rozkazu COMMIT lub ROLLBACK.
Rozkaz SAVEPOINT pozwala na zaznaczenie i nazwanie pewnego punktu
COMMIT powoduje skasowanie wszystkich uprzednio zaznaczonych punktw.
skrypt.
3.8. Normalizacja relacji
3.8.1. Cele normalizacji
5/28/2018 Bazy Danych - Robert Chwastek
39/81
Bazy danych Robert Chwastek
39
nazwa przedmiotu, imie, nazwisko,
ul. Krlewska 30/3 Krakw)
redundancja danych;
ulica, nr_domu, nr_mieszkania
3.8.2.
5/28/2018 Bazy Danych - Robert Chwastek
40/81
Bazy danych Robert Chwastek
40
postaci normalnej ilustruje rysunek:
3.8.3. Definicje pomocnicze
postaci normalnej. Przed omwieniem procesu normalizacji konieczne jest jednak
5/28/2018 Bazy Danych - Robert Chwastek
41/81
Bazy danych Robert Chwastek
41
Uniwersalny schemat relacjiR = {A1, A2, ..., An
R = {A1, A2, ..., An} nazywamy zbir atrybutw S R, ktry jednoznacznie identyfikuje wszystkie krotki relacji o schemacie R. Inaczej 1 i t2
t1[S] = t2[S]. Kluczem
nie istnieje K
Klucz nazywamy kluczem prostym jest zbiorem jednoelementowym; w przeciwnym wypadku mamy do czynienia z nazywamy kluczami potencjalnymi potencjalnych nazywamy
Atrybut relacji nazywamy podstawowym
relacji. Atrybutrelacji nazywamy wtrnym Atrybut B relacji R jest
identyfikuje B i oznacza A
5/28/2018 Bazy Danych - Robert Chwastek
42/81
Bazy danych Robert Chwastek
42
Atrybut B jest zbioru atrybutw X w schemacie R,
Y i nie istnieje podzbir X Y.
Zbir atrybutw Y jest zbioru atrybutw X w
Y i istnieje podzbir X Y.
atrybutw Z jest
dla dowolnej pary krotek t1 i t2 1[X] = t2[X], istnieje taka parakrotek s1i s2
s1[X] = s2[X] = t1[X] = t2[X] orazs1[Y] = t1[Y] i s1[R-X-Y] = t2[R-X-Y] orazs2[Y] = t2[Y] i s2[R-X-Y] = t1[R-X-Y].
5/28/2018 Bazy Danych - Robert Chwastek
43/81
Bazy danych Robert Chwastek
43
1i t2 1[x] = t2[X]), sposb krotki s1i s2
-X-Y =
t1 t2= (Kowalski, Magda, Systemy operacyjne)odpowiada para kroteks1= (Kowalski, Agnieszka, Systemy operacyjne)s2
wypadku jednoelementowego zbioru atrybutw (Dziecko) od jednoelementowego
zbioru atrybutw X
5/28/2018 Bazy Danych - Robert Chwastek
44/81
Bazy danych Robert Chwastek
44
funkcjonalnymi. 1, A2, ..., An
1, R2, ..., Rm
schemat Riz tego zbioru stanowi podzbir zbioru atrybutw (A1, ..., An) i
1, ..., An 1, ..., Rn dekompozycja relacji r (o schemacie R) na relacje r1, ..., rn 1, ..., rm.
1, ..., Rm atrybutw schematu R od klucza wtedy i tylko wtedy, gdy w dowolnej sekwencji
3.8.4.
5/28/2018 Bazy Danych - Robert Chwastek
45/81
Bazy danych Robert Chwastek
45
kluczami prostymi.
relacji Zamwienia do drugiej postaci normalnej otrzymujemy
Dostawca na zamwieniu
5/28/2018 Bazy Danych - Robert Chwastek
46/81
Bazy danych Robert Chwastek
46
Zamwione dostawy
3.8.5.
5/28/2018 Bazy Danych - Robert Chwastek
47/81
Bazy danych Robert Chwastek
47
3.8.6.
Y Z = R i podzbir Y jest nietrywialnie
Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w
funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej,
atrybutami.
5/28/2018 Bazy Danych - Robert Chwastek
48/81
Bazy danych Robert Chwastek
48
3.8.7.
wtedy i tylko wtedy, 1, ..., Rm klucza.
3.8.8. Podsumowanie
5/28/2018 Bazy Danych - Robert Chwastek
49/81
Bazy danych Robert Chwastek
49
5/28/2018 Bazy Danych - Robert Chwastek
50/81
Bazy danych Robert Chwastek
50
4.
4.1. Operatory
4.1.1. Operatory arytmetyczne
nego. Jednak
Operator Opis
( )
SELECT (X+Y)/(Y+Z) ...
+, - Operatory jednoargumentowe zachowania izmiany znaku.
... WHERE NR = -1
... WHERE -PLACA < 0*, / SELECT 2*X+1
... WHERE X > Y/2+, - Dodawanie, odejmowanie SELECT 2*X+1
... WHERE X > Y-Z
4.1.2. Operatory znakowe
nkatenacji.
operatora konkatenacji.
Operator Opis
|| SELECT Nazwa: || ENAME ...
5/28/2018 Bazy Danych - Robert Chwastek
51/81
Bazy danych Robert Chwastek
51
4.1.3. Operatory porwnania
Operator Opis ( )
... NOT (A=1 OR B=1)
= rwne
... WHERE PLACA = 1000
!=, ^=,
... WHERE PLACA != 1000
> ... WHERE PLACA > 1000< ... WHERE PLACA < 1000>= ... WHERE PLACA >= 1000
5/28/2018 Bazy Danych - Robert Chwastek
52/81
Bazy danych Robert Chwastek
52
x AND y[NOT]EXISTS
zwraca przynajmniej jeden wiersz.
... WHERE EXISTS (SELECT PLACAFROM PRAC WHERE WYDZIAL =30)
[NOT]
LIKE
jest rwny NULL. Litera _
... WHERE STAN LIKE T%
IS [NOT]NULL
[Nie] jest rwne NULL. ... WHERE ZAWOD IS NULL
NULL. Np. rozkaz:
SELECT TRUE FROM prac
WHERE wydzial NOT IN (5, 15, NULL) ;
wydzial NOT IN (5, 15, NULL)
wydzial != 5 AND wydzial != 15 AND wydzial != NULL
4.1.4. Operatory logiczne
Operator Opis
( )
SELECT ... WHERE x = y AND (a = bOR p = q)
NOT gicznego
... WHERE NOT (zawod IS NULL)
WHERE NOT (A=1)AND Logiczne i. Wynik jest rwny
... WHERE A = 1 AND B = 2
OR Logiczne lub. Wynike jest rwny
... WHERE A = 1 OR B = 3
5/28/2018 Bazy Danych - Robert Chwastek
53/81
Bazy danych Robert Chwastek
53
jednego operandu jest rwnaTRUE
AND true false nulltrue true false nullfalse false false falsenull null false null
OR true false nulltrue true true truefalse true false null
null true null null
4.1.5.
Operatory zbiorowe
Operator Opis
UNION
... SELECT ... UNION SELECT ...
INTERSECT tylko raz
... SELECT ... INTERSECT SELECT ...
MINUS tylko raz
... SELECT ... MINUS SELECT ...
4.2.
operandw.
numeryczny: 2 * 2 znakowy: TO_CHAR(TRUNC(SYSDATE + 7))
5/28/2018 Bazy Danych - Robert Chwastek
54/81
Bazy danych Robert Chwastek
54
SET Nazwisko = LOWER(Nazwisko)
[table.] { column | ROWID }textnumbersequence.CURRVALsequence.NEXTVALNULLROWNUMLEVELSYSDATEUIDUSER
pracownicy.nazwisko 10SYSDATE
: { n | variable } [ :ind_variable ]:nazwisko_pracownika:nazwisko_pracownika_indykator function_name( [DISTINCT | ALL] expr [, expr] ... )LENGTH(Kowalski)ROUND(1234.567*82) (expr)+expr, -expr, PRIOR exprexpr * expr, expr / exprexpr + expr, expr - expr, expr || expr(Kowalski: || Nauczyciel)LENGTH(Nowak) * 57SQRT(144) + 72 (expr [, expr], ...)
5/28/2018 Bazy Danych - Robert Chwastek
55/81
Bazy danych Robert Chwastek
55
(Kowalski, Nowak, Burzynski)(10, 20, 40)(LENGTH(Kowalski) * 5, -SQRT(144) + 77, 59)
jako warunek w klauzulach WHERE i HAVING w klauzulach CONNECT BY, START WITH, ORDER BY klauzuli VALUE w rozkazie INSERT w klauzuli SET rozkazu UPDATE4.3. Warunki
porwnanie z dowolnym lub ze wszystkimi elementami listy lub zapytania { ANY | ALL }( [,
5/28/2018 Bazy Danych - Robert Chwastek
56/81
Bazy danych Robert Chwastek
56
EXISTS kombinacja innych warunkw (podana zgodnie z priorytetami)( )NOT AND OR
Nazwisko = Kowalski
pracownicy.Wydzial = Wydzialy.Wydzial
Data_urodzenia > 01-JAN-67Zawod IN (Dyrektor, Urzednik, Informatyk)
Placa BETWEEN 500 AND 1500
5/28/2018 Bazy Danych - Robert Chwastek
57/81
Bazy danych Robert Chwastek
57
5.
5.1. Funkcje numeryczne
Przeznaczenie
ABS(n) ABS(-15)Wynik: 15
CEIL(n)
CEIL(15.7)Wynik: 16
FLOOR(n)
FLOOR(15.7)Wynik: 15
MOD(m, n) MOD(7, 5)Wynik: 2
POWER(m, n)
POWER(2, 3)Wynik: 8
ROUND(n[, m]) odpowiedniej liczby cyfr przedprzecinkiem)
ROUND(16.167, 1)Wynik: 16.2
ROUND(16, 167, -1)Wynik: 20
SIGN(n) od 0
SIGN(-15)Wynik: -1
SQRT(n) Zwraca pierwiastek kwadratowy liczby n.
SQRT(25)Wynik: 5
TRUNC(m[, n])
TRUNC(15.79, 1)Wynik: 15.7
TRUNC(15.79, -1)Wynik: 10
5.2. Funkcje znakowe
Przeznaczenie
CHR(n) Zwraca znak o podanym kodzie CHR(65)Wynik: A
5/28/2018 Bazy Danych - Robert Chwastek
58/81
Bazy danych Robert Chwastek
58
INITCAP(string)
INITCAP(PAN JANNOWAK)Wynik: Pan JanNowak
LOWER(string) Zamienia wszystkie litery w podanym
LOWER(PAN JAN
NOWAK)Wynik: pan jannowak
LPAD(string1, n[, string2])
zwracane jest n pierwszych znakw z
tekstu string1.
LPAD(Ala ma , kota*,17)Wynik:kota*kota*Ala ma
LTRIM(string[, zbir])
Usuwa litery z tekstu string od lewej
pusty.
LTRIM(xxxXxxOstatn Wynik:
REPLACE(string,search [, replace])
replace.
REPLACE(Jack &Jue, J, Bl)Wynik:
Black & BlueRPAD(string1, n[, string2])
zwracane jest n pierwszych znakw ztekstu string1.
RPAD(Ala ma , 17,kota*)Wynik:Ala ma kota*kota*
RTRIM(string
[, zbir])
RTRIM(Ostatnie
Wynik:
SOUNDEX(string) wymawianych tak samo.
SELECT nazwiskoFROM bibl WHERESOUNDEX (nazwisko)= SOUNDEX('Mickiewicz');
SUBSTR(string, m[, n])
SUBSTR(ABCDE,2,3)Wynik:
5/28/2018 Bazy Danych - Robert Chwastek
59/81
Bazy danych Robert Chwastek
59
1.
BCD
TRANSLATE(string, from, to)
wszystkich znakw from na znak to.
TRANSLATE(HELLO! THERE!, !,
-)Wynik:HELLO- THERE-
UPPER(string)
UPPER(Jan Nowak)Wynik:JAN NOWAK
ASCII(string) Zwraca kod ASCII pierwszej litery w
ASCII(A)Wynik: 65
INSTR(string1,string2 [, n [, m]])
INSTR(MISSISSIPPI, S, 5,2)Wynik: 7
LENGTH(string) LENGTH(Nowak)Wynik: 5
5.3. Funkcje grupowe
pomijane). Klauzula ALL powoduje wybranie wszystkich wierszy wynikowych do
Przeznaczenie
AVG( [DISTINCT | ALL]num)
SELECT AVG(placa)Srednia FROM pracownicy
COUNT( [DISTINCT |ALL] expr)
ktrych expr nie jest rwneNULL
SELECT COUNT(nazwisko)Liczba FROM pracownicy
COUNT(*)
SELECT COUNT(*)Wszystko FROMpracownicy
5/28/2018 Bazy Danych - Robert Chwastek
60/81
Bazy danych Robert Chwastek
60
NULLMAX( [DISTINCT | ALL]expr)
SELECT MAX(Placa) MaxFROM pracownicy
MIN( [DISTINCT | ALL]expr)
SELECT MIN(Placa) MinFROM pracownicy
STDDEV( [DISTINCT |ALL] num) Zwraca odchylenie
SELECT STDDEV(Placa)Odchylenie FROMpracownicy
SUM( [DISTINCT | ALL]num)
SELECT SUM(Placa)Koszty osobowe FROMpracownicy
VARIANCE( [DISTINCT |ALL] num)
NULL
SELECT VARIANCE(Placa)Wariancja FROMpracownicy
5.4. Funkcje konwersji
typTOtyp.Pierwszy typ jest typem, z ktrego wykonywana jest konwersja, drugi jest typemwynikowym.
Przeznaczenie CHARTOROWID(string)
znakw na ROWID
SELECT nazwisko FROMpracownicy WHERE ROWID =CHARTOROWID(0000000F.0003.0002)
CONVERT(string[,dest_char_set[,source_char_set ] ])
implementacjami zestawuznakw. Zestawem
SELECT CONVERT (NewWORD, US7ASCII, WE8HP)Conversion FROM DUAL
HEXTORAW (string)
INSERT INTO GRAPHICS(RAW_COLUMN) SELECTHEXTORAW (7D) FROMDUAL
ROWTOHEX(raw) cyfry szesnastkowe
liczbie.
SELECT RAWTOHEX(RAW_COLUMN) GraphicsFROM GRAPHICS
ROWIDTOCHAR SELECT ROWID FROM
5/28/2018 Bazy Danych - Robert Chwastek
61/81
Bazy danych Robert Chwastek
61
wiersza na tekst. Wynik 18 znakw.
GRAPHICS WHEREROWIDTOCHAR(ROWID)LIKE %F38%
TO_CHAR(n [, fmt])(konwersja
numeryczna)
SELECT TO_CHAR(17145,$099,999) Char FROM
DUAL
TO_CHAR(d [, fmt])(konwersja daty)
SELECTTO_CHAR(HIREDATE, MonthDD, YYYY) New date format
FROM EMP WHERE ENAME =SMITHTO_DATE(string [,fmt])
podanego tekstu. Do
DD-MON-YY
INSERT INTO BONUS(BONUS_DATE) SELECTTO_DATE (January 15, 1989,Month dd, YYYY)FROM DUAL
TO_NUMBER (string)
UPDATE EMP SET SAL = SAL + TO_NUMBER( SUBSTR($100 raise', 2, 3)) WHERE ENAME = 'BLAKE
5.5. Funkcje operacji na datach Przeznaczenie
ADD_MONTHS(date, n)
ujemna
SELECT ADD_MONTHS(HIREDATE, 12)Next yearFROM EMP WHERE ENAME =
SMITHLAST_DAY(date)
SELECT LAST_DAY(SYSDATE) Last
5/28/2018 Bazy Danych - Robert Chwastek
62/81
Bazy danych Robert Chwastek
62
podanej dacie. FROM DUALMONTHS_BETWEEN (date1, date2)
31 dni.
SELECT MONTHS_BETWEEN(02-feb-86, 01-jan-86))MonthsFROM DUAL
NEW_TIME(date, a,b)
z:AST, ADT - Atlantic Standard
or Daylight TimeBST, BDT - Bering Standardor Daylight TimeCST, CDT - Central Standardor Daylight TimeEST, EDT - Eastern Standardor Daylight TimeGMT - Greenwich Mean TimeHST, HDT- Alaska-Hawaii
Standard or Daylight TimeMST, MDT - MountainStandard or Daylight TimeNST - Newfoundland StandardTimePST, PDT - Pacific Standard orDaylight TimeYST, YDT - Yukon Standardor Daylight Time
SELECT TO_CHAR(NEW_TIME(TO_DATE(17:47, hh24:mi), PST,GMT),hh24:mi) GREENWICHTIMEFROM DUAL
NEXT_DAY(date,string) tygodnia podanego w string,
SELECT NEXT_DAY(17-MAR-89, TUESDAY)NEXT DAYFROM DUAL
ROUND(date [, fmt])
SELECT ROUND ( TO_DATE(27-OCT-88), YEAR)FIRST OF THE YEARFROM DUAL
SYSDATE Nie wymaga podaniaargumentw.
SELECT SYSDATE FROMDUAL
5/28/2018 Bazy Danych - Robert Chwastek
63/81
Bazy danych Robert Chwastek
63
TRUNC(date [, fmt]) jednostki podanej w fmt. usuwana jest informacja oczasie.
SELECT TRUNC(TO_DATE(28-OCT-88, YEAR)First Of The YearFROM DUAL
CC, SCC wiekSYYY, YYYY, YEAR,SYEAR, YYY, YY, Y
Q MONTH, MON, MM
WW W DDD, DD, J DAY, DY, D HH, HH12, HH24 godzinaMI minuta
5.6. Inne funkcje
Przeznaczenie
GREATEST(expr [,expr] ...)
konwertowane do typu
wykonaniem porwnania.
SELECT GREATEST (Harry,Harriot, Harold)GREATEST FROM DUAL
LEAST(expr [,expr] ...) konwertowane do typu
wykonaniem porwnania.
SELECT LEAST (Harry,Harriot, Harold)LEAST FROM DUAL
NVL (expr1, expr2) zwraca expr2, w przeciwnymwypadku zwraca expr1.
SELECT ENAMENVL(TO_CHAR(COMM),NOT APPLICABLE)
COMMISIONFROM EMP WHERE DEPTNO = 30
5/28/2018 Bazy Danych - Robert Chwastek
64/81
Bazy danych Robert Chwastek
64
UID Zwraca unikalny identyfikator
SELECT USER, UID FROMDUAL
USER SELECT USER, UIDFROM DUAL
5.7. Formaty zapisu danych
5.7.1. Formaty numeryczne
numerycznego:
Element Opis9 9999 0 0999 $ $9999 B B9999 MI 9999MI PR 9999PR
>, (przecinek) 9,999
. (kropka) 99.99 V 999V99 n
po VE 9.999EEEE
DATE DATE Dla dat przechowywanych w postaci numerycznej.
5.7.2. Formaty dat
Format standardowy, to DD-MON-YY.
5/28/2018 Bazy Danych - Robert Chwastek
65/81
Bazy danych Robert Chwastek
65
Elementy formatu dat przedstawia tabela:
Element Opis
SCC lub CC YYYY lub SYYYY
-YYY, YY lub Y Ostatnie 3, 2 lub 1 cyfra rokuY,YYY Rok z przecinkiem na podanej pozycjiSYEAR lub YEAR Rok przeliterowany. S powoduje poprzedzenie daty przed
BC lub AD B.C. lub A.D Znak BC/AD z kropkamiQ MM
MONTH MON WW
i trwa 7 dni)W
DDD DD D
DAY DY Trzyliterowy skrt nazwy dniaAM lub PM A.M. lub P.M. HH lub HH12 Godzina (1-12)HH24 Godzina (1-24)MI Minuta (0-59)SS Sekunda (0-59)SSSS
/ ., Znaki przestankowe umieszczane w wyniku...
liczb zerami; TH dla
liczby 4;
5/28/2018 Bazy Danych - Robert Chwastek
66/81
Bazy danych Robert Chwastek
66
6. Programowanie proceduralne - PL/SQL
6.1. Wprowadzenie
PL/SQL pozwala wykorz
niektre rozkazy kontroli danych jak CONNECT, GRANT i REVOKE.
z
PL/SQL pozwala na definiowa premia NUMBER(7, 2);
podatek := cena * stopa;
SELECT placa INTO placa_aktualna FROM pracownicy
WHERE nazwisko = Nowak ;
pola.
stopa_premii CONSTANT NUMBER(3, 2) := 0.10;
tytul books.tytul%TYPE
5/28/2018 Bazy Danych - Robert Chwastek
67/81
Bazy danych Robert Chwastek
67
6.2. Struktura bloku
DECLARE
deklaracjeBEGIN
rozkazy wykonywalneEXCEPTION
END;
6.3. Procedury i funkcje
PL/SQL w wersji 2.0 pozwala na definiowanie funkcji i procedur. PROCEDURE name [ (parameter [, parameter] ... ) ] IS
[local declarations]
BEGIN executable statements
[EXCEPTION
exception handlers]END [name];
var_name [IN | OUT | IN OUT] datatype [{ := | DEFAULT } value]
5/28/2018 Bazy Danych - Robert Chwastek
68/81
Bazy danych Robert Chwastek
68
PROCEDURE zwieksz (prac_id INTEGER, kwota REAL) IS
placa_aktualna REAL;
BEGIN UPDATE pracownicy SET placa_podstawowa =
placa_podstawowa + kwota WHERE prac_id = id_pracownika;
END zwieksz;
FUNCTION name [ (argument [, argument] ... ) ] RETURN datatype IS
[local declarations]BEGIN executable statements
[EXCEPTION
exception handlers]END [name];
6.4. KursoryW celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany
dwch typw kursorw:
5/28/2018 Bazy Danych - Robert Chwastek
69/81
Bazy danych Robert Chwastek
69
operacji.
DECLARE
FROM pracownicy
...
BEGIN ...
sposb:OPEN prac_kursor;
FETCH prac_kursor INTO prac_nazw, prac_wydz;
CLOSE prac_kursor;
powodu braku wierszy
%ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora)
rsora:
LOOP FETCH prac_kursor INTO prac_nazw, prac_wydz;
IF prac_kursor%ROWCOUNT > 10 THEN
... EXIT WHEN prac_kursor%NOTFOUND;
...
END LOOP;
5/28/2018 Bazy Danych - Robert Chwastek
70/81
Bazy danych Robert Chwastek
70
6.5. Rekordy
wierszom w tabeli, widoku lub kursorze, nie pozwala jednak na definiowanie typwposzczeglnych pl.
%ROWTYPE:DECLARE CURSOR prac_kursor IS
SELECT nazwisko, wydzial, data_zatrudnienia
FROM pracownicy; prac_rek prac_kursor%ROWTYPE
...
FETCH prac_kursor INTO prac_rek;
Rekor nazwa_rekordu nazwa_tabeli%ROWTYPE;
DECLARE
prac_rek pracownicy%ROWTYPE; ...
BEGIN
...END;
nazwa_rekordu.nazwa_pola;
suma := suma + prac_rek.placa;
prac_rek.nazwisko := UPPER(prac_rek.nazwisko);
e jest na dwa sposoby:
5/28/2018 Bazy Danych - Robert Chwastek
71/81
Bazy danych Robert Chwastek
71
DECLARE prac_rek1 pracownicy%ROWTYPE;
prac_rek2 pracownicy%ROWTYPE;
BEGIN SELECT nazwisko, imie, wydzial, placa_podstawowa
INTO prac_rek1 FROM pracownicy
WHERE wydzial = 30; prac_rek2 := prac_rek1;
...
END;
DECLARE CURSOR prac_kursor IS
SELECT nazwisko, imie, wydzial, placa_podstawowa FROM pracownicy;
BEGIN
FOR pracownik IN prac_kursor LOOP suma := suma + pracownik.placa_podstawowa;
...END LOOP;
Niejawnie deklarowanym rekordem jest tu zmienna o nazwie pracownik. Zmienna ta jest nazwa_kursora%ROWTYPE.
6.6.
6.6.1. Informacje podstawowe
5/28/2018 Bazy Danych - Robert Chwastek
72/81
Bazy danych Robert Chwastek
72
DECLARE cz_wsk NUMBER(3,1);
BEGIN
... SELECT cena / zysk FROM akcje
-- ZERO_DIVIDE
INSERT INTO informacje (nazwa, c_z)
VALUES (ABC, cz_wsk); COMMIT
EXCEPTION WHEN ZERO_DIVIDE THEN INSERT INTO informacje (nazwa, c_z)
VALUES (ABC, NULL);
COMMIT; ...
WHEN OTHERS THEN
ROLLBACK;
END;
BEGIN SELECT ...
SELECT ...
SELECT ...
END;
5/28/2018 Bazy Danych - Robert Chwastek
73/81
Bazy danych Robert Chwastek
73
BEGIN
SELECT ...
SELECT ... SELECT ...
EXCEPTION
WHEN NO_DATA_FOUND THEN
END;
6.6.2.
otwartego;
w indeksie zadeklarowanym jako UNIQUE;
kursora (np. nie otwartego);
numerycznego z tekstu, ktry nie reprezentuje liczby;
lub pola;
ZERO_DIVIDE - prba dzielenia przez zero;6.6.3.
5/28/2018 Bazy Danych - Robert Chwastek
74/81
Bazy danych Robert Chwastek
74
EXCEPTION WHEN ... THEN
WHEN ... THEN
WHEN ... THEN
WHEN OTHERS THEN END;
WHEN over_limit OR under_limit OR VALUE_ERROR THEN
...
6.6.4.
DECLARE overflow EXCEPTION;
result NUMBER(5);
BEGIN ...
END;
rozkazach SQL.
5/28/2018 Bazy Danych - Robert Chwastek
75/81
Bazy danych Robert Chwastek
75
Jak podano w
DECLARE brak_czesci EXCEPTION; liczba_czesci NUMBER(4);
BEGIN ...
IF liczba_czesci < 1 THEN
RAISE brak_czesci; END IF;
...
EXCEPTION
WHEN brak_czesci THEN END;
RAISE INVALID_NUMBER;
6.7.
6.7.1. Rozkaz OPEN
Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem OPEN cursor_name
[(input_parameter [, input_parameter] ... )] ;
Parametry: cursor_name - nazwa kursora uprzednio zadeklarowanego, ktry nie jest aktualnie
otwarty.
klauzuli WHERE).
5/28/2018 Bazy Danych - Robert Chwastek
76/81
Bazy danych Robert Chwastek
76
celu pobrania ich z kursora.
DECLARE CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS ...BEGIN OPEN prac_kur(Kowalski, 10); ... OPEN prac_kur(wydz => 15, nazw => Nowak);END;
6.7.2. Rozkaz CLOSE
CLOSE cursor_name ;
Parametry: cursor_name - nazwa aktualnie otwartego kursora.6.7.3. Rozkaz FETCH
kolumn w aktualnym wierszu.FETCH cursor_name INTO
{ record_name | variable_name [, variable_name] ... } ;
Parametry:
5/28/2018 Bazy Danych - Robert Chwastek
77/81
Bazy danych Robert Chwastek
77
cursor_name - nazwa aktualnie otwartego kursora.
%ROWTYPE)....
OPEN prac_kursor;
...LOOP
FETCH prac_kursor INTO prac_rek;
EXIT WHEN prac_kursor%NOTFOUND; ...
END LOOP;
6.7.4. Rozkaz SELECT ... INTO
Rozkaz SELECT ... INTO odczytuje informacje z bazy danych i zapisuje je do
SELECT select_list_item [, select_list_item] ... INTO { record_name |
variable_name [, variable_name] ... } rest_of_select_statement ;
Parametry:Zobacz opis rozkazu FETCH.SELECT nazwisko, placa*12 INTO pnazw, plac_sum FROM pracownicy
WHERE pracownik_nr = 12345;
6.7.5. Rozkaz IF
Rozkaz IF pozwala na warunkowe wykonywanie rozkazw.IF plsql_condition THEN seq_of_statements
[ELSEIF plsql_condition THEN seq_of_statements] ...
[ELSE seq_of_statements]
END IF;
Parametry:
5/28/2018 Bazy Danych - Robert Chwastek
78/81
Bazy danych Robert Chwastek
78
Opis:
IF liczba_czesci < 20 THEN ilosc_zamawianych := 50;
ELSEIF liczba_czesci < 30 THEN ilosc_zamawianych := 20;
ELSE
ilosc_zamawianych := 5;END IF;
INSERT INTO zamowienia VALUES(typ_czesci, ilosc_zamawianych);
6.7.6. Rozkaz LOOP
[][ { WHILE plsql_condition } |
{ FOR {numeric_loop_param | cursor_loop_param } } ]LOOP seq_of_statements END LOOP [ label_name ] ;
index IN [REVERSE] integer_expr .. integer_expr
record_name IN
{ cursor_name [(parameter [, parameter] ...)] | ( select_statement ) }
5/28/2018 Bazy Danych - Robert Chwastek
79/81
Bazy danych Robert Chwastek
79
Parametry:
label_name.index
parametrami).
Opis:
LOOP
...
IF (x > 10) THEN EXIT loop1; ...
END LOOP loop1;
WHILE x < 10 LOOP
...
x := x - y; ...
END LOOP;
FOR i IN 1 .. n LOOP silnia := silnia * n;
5/28/2018 Bazy Danych - Robert Chwastek
80/81
Bazy danych Robert Chwastek
80
END LOOP;
DECLARE
CURSOR prac_kursor IS select * FROM pracownicy; prac_rek prac_kursor%ROWTYPE;
BEGIN ...
FOR prac_rek IN prac_kursor LOOP
suma := suma + prac_rek.placa_podstawowa; END LOOP;
...
END;
6.7.7. Rozkaz EXIT
EXIT [label_name] [WHEN plsql_condition] ;
Parametry:
wykonywanej.
6.7.8. Rozkaz GOTO
hmiastowego przekazania sterowania od rozkazu
> GOTO label_name ;
Opis:
automatycznie.
5/28/2018 Bazy Danych - Robert Chwastek
81/81
Bazy danych Robert Chwastek
81
7. Literatura1. Wojciech Cellary, Zbyszko Krlikowski Wprowadzenie do projektowania baz danych
dBase III, Wydawnictwa Naukowo -Techniczne, Warszawa 1988
2. ORACLE SQL Language Reference Manual3. ORACLE PL/SQL Users Guide and Reference4. ORACLE SQL*Plus Users Guide and Reference