SQL
JZYK ZAPYTAC
dr in偶. Piotr Muryjas
Instytut Informatyki
Politechnika Lubelska
BAZA DANYCH ECDL PRZYKAAD ROZWIZANIA
STUDENCI
Id_student VARCHAR2 (7)
Nazwisko VARCHAR2 (25)
Imie VARCHAR2 (15)
EGZAMINATORZY
EGZAMINY Data_ur DATE
Id_egzaminator VARCHAR2 (4)
Nr_egz NUMBER (7) Miejsce VARCHAR2 (15)
Nazwisko VARCHAR2 (25)
Id_student
VARCHAR2 (7) PESEL VARCHAR2 (11)
Imie VARCHAR2 (15)
przeprowadza
zdaje
Id_przedmiot NUMBER (3) Kod_poczta VARCHAR2 (5)
Kod_poczta VARCHAR2 (5)
Id_egzaminator VARCHAR2 (4) Miasto VARCHAR2 (15)
Miasto VARCHAR2 (15)
Data_egz DATE Ulica VARCHAR2 (30)
Ulica VARCHAR2 (30)
Id_osrodek NUMBER (5) Numer VARCHAR2 (8)
Numer VARCHAR2 (8)
Zdal VARCHAR2(1) Tel VARCHAR2 (12)
Tel VARCHAR2 (12)
Fax VARCHAR2 (12)
Fax VARCHAR2 (12)
E_mail VARCHAR2 (30)
E_mail VARCHAR2 (30)
Nr_ECDL VARCHAR2 (9)
Data_ECDL DATE
jest miejscem
jest tematem
OSRODKI
Id_osrodek NUMBER (5)
PRZEDMIOTY
Nazwa_o VARCHAR2 (30)
Id_przedmiot NUMBER (3)
Kod_poczta VARCHAR2 (5)
Nazwa_p VARCHAR2 (40)
Miasto VARCHAR2 (15)
Opis VARCHAR2 (200)
Ulica VARCHAR2 (30)
Numer VARCHAR2 (8)
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 2
INSTRUKCJA SELECT
SELECT kol1 [alias1], kol2 [alias2],...,koln, wyra偶enie [alias] FROM tabela
gdzie: kol1, kol2,...,koln - nazwy kolumn tabeli, oddzielone przecinkiem; lista kolumn mo偶e by膰
zast膮piona symbolem "*", je艣li wszystkie kolumny na li艣cie
wyra偶enie dowolne wyra偶enie oparte na kolumnach podanej tabeli
tabela - nazwa tabeli
Przyk艂ady:
1/ SELECT Id_egzaminator Identyfikator, Nazwisko, Imie FROM egzaminatorzy;
2/ SELECT Id_osrodek, Nazwa_o nazwa FROM osrodki;
3/ SELECT * FROM przedmioty;
ELIMINOWANIE WIERSZY O POWTARZAJCEJ SI WARTO艢CI POLA
SELECT DISTINCT kol1, kol2,...,koln FROM tabela
Klauzula DISTINCT musi pojawi膰 si臋 jako pierwsze s艂owo kluczowe po s艂owie SELECT.
Przyk艂ady:
1/ SELECT DISTINCT Id_przedmiot, Id_student FROM egzaminy;
2/ SELECT DISTINCT Id_osrodek FROM egzaminy;
SORTOWANIE WY艢WIETLANYCH INFORMACJI
SELECT kol1, kol2,...,koln FROM tabela ORDER BY koli
gdzie: koli - nazwa kolumny, wed艂ug kt贸rej odbywa si臋 sortowanie
Porz膮dek sortowania - rosn膮cy (ASCENDING) - domy艣lny, malej膮cy (DESCENDING).
ORDER BY musi by膰 ostatni膮 klauzul膮 w instrukcji SELECT.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 3
SELECT kol1, kol2,...,koln FROM tabela
ORDER BY koli DESC
Przyk艂ady:
1/ SELECT Id_osrodek, Nazwa_o FROM osrodki ORDER BY Miasto;
2/ SELECT Id_student, Nazwisko, Imie FROM studenci ORDER BY Nazwisko;
Sortowanie informacji wed艂ug kilku kolumn, zgodnie z og贸ln膮 postaci膮 polecenia:
SELECT kol1, kol2,...,koln FROM tabela
ORDER BY koli, kolj
lub
SELECT kol1, kol2,...,koln FROM tabela
ORDER BY koli DESC, kolj
Przyk艂ady:
1/ SELECT Id_egzaminator, Nazwisko, Imie FROM egzaminatorzy ORDER BY Nazwisko, Imie;
2/ SELECT Id_student, Id_przedmiot, Data_egz FROM egzaminy ORDER BY Id_student, Data_egz
DESC;
DEFINIOWANIE WARUNK脫W WYSZUKIWANIA
SELECT kol1, kol2,...,koln FROM tabela WHERE warunek
gdzie: warunek - warunek lub warunki, kt贸re musz膮 spe艂nia膰 wybrane i wy艣wietlane rekordy
tabeli
Operatory SQL:
" (NOT) BETWEEN ... AND ...
" (NOT) IN (lista warto艣ci)
" (NOT) LIKE
" IS (NOT) NULL
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 4
SELECT kol1, kol2,...,koln FROM tabela
WHERE koli BETWEEN wyra偶enie_1 AND wyra偶enie_2
SELECT kol1, kol2,...,koln FROM tabela
WHERE koli IN (warto艣膰_1, warto艣膰_2,...,warto艣膰_n | polecenie SELECT)
SELECT kol1, kol2,...,koln FROM tabela
WHERE koli NOT LIKE "A%" AND kolj LIKE "k_"
SELECT kol1, kol2,...,koln FROM tabela
WHERE koli IS NULL
Przyk艂ady:
1/ SELECT Id_student, Id_przedmiot, Data_egz FROM egzaminy WHERE Data_egz BETWEEN
'20-04-98' AND '20-05-98' ORDER BY Id_student, Data_egz DESC;
2/ SELECT Id_przedmiot, Id_egzaminator, Data_egz FROM egzaminy WHERE Id_student IN
('0000050', '0000055');
3/ SELECT * FROM egzaminatorzy WHERE Id_egzaminator IN (SELECT DISTINCT
Id_egzaminator FROM egzaminy);
4/ SELECT * FROM przedmioty WHERE Id_przedmiot NOT IN (SELECT DISTINCT
Id_przedmiot FROM egzaminy);
5/ SELECT Nazwisko, Imie FROM studenci WHERE Nazwisko LIKE 'M%';
6/ SELECT * FROM studenci WHERE E_mail LIKE 'p_' ;
7/ SELECT Id_student, Nazwisko, Imie FROM studenci WHERE Nr_ECDL IS NULL;
8/ SELECT * FROM studenci WHERE Id_student = Nr_ECDL;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 5
TWORZENIE KRYTERI脫W ZAO呕ONYCH
Wymaga stosowania operator贸w AND i OR.
SELECT kol1, kol2,...,koln FROM tabela
WHERE warunek1 AND | OR warunek2 [AND | OR warunek2 ...]
Przyk艂ady:
1/ SELECT Id_student, Id_przedmiot, Data_egz FROM egzaminy WHERE Id_osrodek = 5 AND
Data_egz BETWEEN '20-04-98' AND '20-05-98';
2/ SELECT Id_student FROM egzaminy WHERE Zdal = 'N' AND Id_przedmiot = 7;
3/ SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz > '20-04-98' AND
(Id_egzaminator = '0036' OR Id_egzaminator = '0040');
4/ SELECT * FROM egzaminy WHERE Id_osrodek = 3 AND Data_egz LIKE '%04-98';
HIERARCHIA OPERATOR脫W
OPERATOR OPERACJA
=, !=, <, >, <=, >=, IS NULL, LIKE, por贸wnanie
BETWEEN, IN
NOT negacja
AND koniunkcja
OR alternatywa
" wszystkie operatory por贸wnania i operatory SQL maj膮 jednakowy, najwy偶szy
priorytet
" operator NOT
" AND
" OR
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 6
Przyk艂ady:
1/ SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz > '20-04-98' AND
Id_egzaminator = '0036' OR Id_egzaminator = '0040';
GRUPOWANIE DANYCH
Wykonuje si臋 w celu uzyskania informacji zbiorczych dla zbioru rekord贸w.
SELECT wyra偶enie_grup FROM tabela [WHERE warunek]
SELECT kol1, kol2,...,koln, wyra偶enie_grup FROM tabela GROUP BY koli, kolj
gdzie: koli - nazwa kolumny wed艂ug kt贸rej przebiega grupowanie wierszy,
wyra偶enie_grup - nazwa funkcji grupowej.
Rodzaje wyra偶e艅 grupuj膮cych - funkcji grupowej:
" AVG([ DISTINCT ] kol | wyra偶enie)
" COUNT( [ DISTINCT ] kol | wyra偶enie)
" MAX( [ DISTINCT ] kol | wyra偶enie)
" MIN( [ DISTINCT ] kol | wyra偶enie)
" SUM([ DISTINCT ] kol | wyra偶enie)
Przyk艂ady:
1/ SELECT COUNT(*) FROM egzaminy WHERE Id_egzaminator = '0036';
2/ SELECT MAX(Data_egz) FROM egzaminy WHERE Id_osrodek = 5;
3/ SELECT Id_osrodek, COUNT(*) FROM egzaminy GROUP BY Id_osrodek;
4/ SELECT Id_przedmiot, COUNT(*) FROM egzaminy GROUP BY Id_przedmiot;
5/ SELECT MIN(Data_egz), Id_student FROM egzaminy GROUP BY Id_student;
6/ SELECT Id_egzaminator, Id_osrodek, COUNT(*) FROM egzaminy GROUP BY
Id_egzaminator, Id_osrodek ORDER BY Id_osrodek;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 7
WYB脫R GRUP DANYCH WEDAUG ZADANEGO KRYTERIUM
SELECT kol1, kol2,...,koln, wyra偶enie_grup FROM tabela
GROUP BY koli, kolj
HAVING warunek_grup
gdzie: warunek_grup - warunek, jaki musz膮 spe艂nia膰 poszczeg贸lne zdefiniowane grupy
Przyk艂ady:
1/ SELECT COUNT(*) FROM egzaminy GROUP BY Id_osrodek HAVING Id_osrodek = 5;
2/ SELECT Id_egzaminator, COUNT(*) FROM egzaminy GROUP BY Id_egzaminator HAVING
COUNT(*) > 10;
3/ SELECT Id_przedmiot, COUNT(*) FROM egzaminy GROUP BY Id_przedmiot HAVING
COUNT(*) > 8;
4/ SELECT Id_student, COUNT(*) FROM egzaminy WHERE Id_osrodek = 1 GROUP BY
Id_student HAVING COUNT(*) > 2 ORDER BY Id_student;
WYSZUKIWANIE DANYCH W WIELU TABELACH
Typy operacji z艂膮czenia tabel:
" r贸wnoz艂膮czenie (equi-join) - oparte na operatorze r贸wno艣ci
" non equi-join - oparte jest na operatorze relacji r贸偶nym od r贸wno艣ci np. <, >, <=, >=
lub operatora SQL BETWEEN
SELECT tab1.kol1,...,tab1.koln, tab2.kol1,...,tab2.koln
FROM tabela1 tab1, tabela2 tab2
WHERE tab1.koli = tab2.kolj
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 8
SELECT tab1.kol1,...,tab1.koln, tab2.kol1,...,tab2.koln
FROM tabela1 tab1
INNER JOIN tabela2 tab2
ON tab1.koli = tab2.kolj
Przyk艂ady:
1/ SELECT egzaminy.Id_student, Id_przedmiot, Nazwisko, Imie FROM egzaminy, studenci
WHERE egzaminy.Id_student = studenci.Id_student;
2/ SELECT egzaminy.Id_student, Nazwisko, Imie, egzaminy.Id_osrodek, Nazwa_o FROM
egzaminy, studenci, osrodki WHERE egzaminy.Id_student = studenci.Id_student AND
egzaminy.Id_osrodek = osrodki.Id_osrodek ORDER BY egzaminy.Id_student;
Liczba zwi膮zk贸w 艂膮cz膮cych n tabel: n-1
Szczeg贸lny przypadek z艂膮czenia tabel (tzw. z艂膮czenie unarne):
SELECT tab1.kol1,...,tab1.koln, tab2.kol1,...,tab2.koln
FROM tabela1 tab1, tabela1 tab2
WHERE tab1.koli = tab2.kolj
Z艂膮czenie rozszerzaj膮ce:
SELECT tab1.kol1,...,tab1.koln, tab2.kol1,...,tab2.koln
FROM tabela1 tab1, tabela1 tab2
WHERE tab1.koli = tab2.koli(+)
SELECT tab1.kol1,...,tab1.koln, tab2.kol1,...,tab2.koln
FROM tabela1 tab1
LEFT JOIN tabela2 tab2
ON tab1.koli = tab2.kolj
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 9
SELECT tab1.kol1,...,tab1.koln, tab2.kol1,...,tab2.koln
FROM tabela1 tab1
RIGHT JOIN tabela2 tab2
ON tab1.koli = tab2.kolj
Przyk艂ady:
1/ SELECT o.Id_osrodek, Nazwa_o, COUNT(e.Id_osrodek) FROM osrodki o, egzaminy e
WHERE o.Id_osrodek = e.Id_osrodek(+) GROUP BY o.Id_osrodek, Nazwa_o;
2/ SELECT p.Id_przedmiot, Nazwa_p, COUNT(DISTINCT e.Id_student) FROM przedmioty p,
egzaminy e WHERE p.Id_przedmiot = e.Id_przedmiot(+) GROUP BY p.Id_przedmiot, Nazwa_p;
3/ SELECT o.Id_osrodek, Nazwa_o, NVL(TO_CHAR(MIN(e.Data_egz)),'Brak danych') Data
FROM osrodki o, egzaminy e
WHERE o.Id_osrodek = e.Id_osrodek(+) GROUP BY o.Id_osrodek, Nazwa_o;
INNE SPOSOBY ACZENIA TABEL
Operator UNION
SELECT kol1, kol2,...,koln FROM tabela1
UNION
SELECT kol1, kol2,...,koln FROM tabela2
gdzie: kol1, kol2,...,koln - nazwy kolumn tabel, mog膮 by膰 takie same, je艣li nie s膮 - to warto艣ci
odpowiadaj膮cych sobie p贸l musz膮 by膰 tego samego typu
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 10
SELECT kol1, kol2,...,koln FROM tabela1
UNION
SELECT kol1, kol2,...,koln FROM tabela2
GROUP BY 2
Przyk艂ad:
SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Id_student = '0000050'
UNION
SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Id_student = '0000060';
Operator INTERSECT
SELECT kol1, kol2,...,koln FROM tabela1
INTERSECT
SELECT kol1, kol2,...,koln FROM tabela2
Przyk艂ad:
SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz BETWEEN '20-04-98'
AND '30-04-98'
INTERSECT
SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz BETWEEN '10-04-98'
AND '25-04-98';
Operator MINUS
SELECT kol1, kol2,...,koln FROM tabela1
MINUS
SELECT kol1, kol2,...,koln FROM tabela2
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 11
Przyk艂ad:
1/ SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz BETWEEN '20-04-98'
AND '30-04-98'
MINUS
SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz BETWEEN '10-04-98'
AND '25-04-98';
2/ SELECT Id_osrodek, Nazwa_o FROM osrodki
MINUS
SELECT DISTINCT o.Id_osrodek, Nazwa_o FROM osrodki o, egzaminy e
WHERE o.Id_osrodek = e.Id_osrodek;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 12
PODZAPYTANIA
SELECT kol1, kol2,...,koln FROM tabela1 WHERE koli =
(SELECT kolm FROM tabela2 [WHERE warunek])
Podzapytania:
" wewn臋trzna instrukcja SELECT wykonywana jest w pierwszej kolejno艣ci i tylko jeden
raz (z wyj膮tkiem podzapyta艅 skorelowanych)
" umo偶liwiaj膮 wykonanie skomplikowanych wybor贸w danych
" pozwalaj膮 definiowa膰 warunki w spos贸b dynamiczny
Przyk艂ady:
1/ SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz = (SELECT
MIN(Data_egz) FROM egzaminy);
2/ SELECT Id_student, Nazwisko, Imie FROM studenci WHERE Id_student IN (SELECT
DISTINCT Id_student FROM egzaminy);
3/ SELECT Id_przedmiot, Nazwa_p FROM przedmiotyWHERE Id_przedmiot NOT IN (SELECT
DISTINCT Id_przedmiot FROM egzaminy);
Rodzaje podzapyta艅:
" zwracaj膮ce jedn膮 warto艣膰 (przyk艂ad 1)
" zwracaj膮ce wiele warto艣ci (przyk艂ad 2 i 3)
Przyk艂ady:
1/ SELECT * FROM studenci WHERE Miasto = (SELECT Miasto FROM studenci WHERE
PESEL = '49887400000');
2/ SELECT Id_student, Id_przedmiot FROM egzaminy WHERE Data_egz IN (SELECT Data_egz
FROM egzaminy WHERE Id_student = '0000049') AND Id_student <> '0000049';
3/ SELECT Id_egzaminator, Id_osrodek FROM egzaminy WHERE (Id_egzaminator, Data_egz) IN
(SELECT Id_egzaminator, MAX(Data_egz) FROM egzaminy GROUP BY Id_egzaminator);
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 13
OPERATORY W PODZAPYTANIACH - ANY, ALL
ANY - por贸wnywanie z dowoln膮 warto艣ci膮 zwracan膮 przez podzapytanie
ALL - por贸wnywanie z ka偶d膮 warto艣ci膮 zwracan膮 przez podzapytanie
Przyk艂ady:
1/ SELECT Id_student FROM egzaminy WHERE Data_egz < ANY (SELECT DISTINCT
Data_egz FROM egzaminy WHERE Id_przedmiot = 1);
2/ SELECT * FROM egzaminy WHERE Data_egz > ALL (SELECT DISTINCT Data_egz FROM
egzaminy WHERE Id_przedmiot = 1);
PODZAPYTANIA A GRUPOWANIE DANYCH
SELECT koli, wyra偶_grup FROM tabela1
GROUP BY koli HAVING koli =
(SELECT kolm FROM tabela2 WHERE warunek)
SELECT koli, wyra偶_grup FROM tabela1
GROUP BY koli HAVING koli =
(SELECT kolm FROM tabela2 GROUP BY kolm)
Przyk艂ady:
1/ SELECT Id_przedmiot FROM egzaminy GROUP BY Id_przedmiot HAVING
MAX(Data_egz) > (SELECT MAX(Data_egz) FROM egzaminy WHERE Id_przedmiot = 3);
2/ SELECT Id_egzaminator, COUNT(*) FROM egzaminy GROUP BY Id_egzaminator HAVING
COUNT(*) = (SELECT MAX(COUNT(*)) FROM egzaminy GROUP BY Id_egzaminator);
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 14
PODZAPYTANIA A SORTOWANIE DANYCH
SELECT koli, wyra偶_grup FROM tabela1
GROUP BY koli HAVING koli =
(SELECT kolm FROM tabela2 WHERE warunek)
ORDER BY kolj
W podzapytaniu nie mo偶e wyst膮pi膰 klauzula ORDER BY. Mo偶na j膮 umieszcza膰 wy艂膮cznie jako
ostani膮 w nadrz臋dnej instrukcji SELECT.
Przyk艂ad:
SELECT Id_przedmiot FROM egzaminy GROUP BY Id_przedmiot HAVING MAX(Data_egz) >
(SELECT MAX(Data_egz) FROM egzaminy WHERE Id_przedmiot = 3) ORDER BY Id_przedmiot;
ZAGNIE呕D呕ANIE PODZAPYTAC
SELECT kol1, kol2, ..., koli FROM tabela1 WHERE koli =
(SELECT kolj FROM tabela2 WHERE kol =
SELECT kolm FROM tabela3 WHERE warunek)
Przyk艂ady:
1/ SELECT Id_egzaminator, Nazwisko, Imie FROM egzaminatorzy WHERE Id_egzaminator IN
(SELECT Id_egzaminator FROM egzaminy GROUP BY Id_egzaminator HAVING COUNT(*)
= (SELECT MAX(COUNT(*)) FROM egzaminy GROUP BY Id_egzaminator));
2/ SELECT Id_student, Nazwisko, Imie FROM studenci WHERE Id_student IN (SELECT
Id_student FROM egzaminy GROUP BY Id_student, Zdal HAVING Zdal = 'N' AND
COUNT(*) = (SELECT MAX(COUNT(*)) FROM egzaminy GROUP BY Id_student, Zdal
HAVING Zdal = 'N'));
Zagnie偶d偶anie podzapyta艅 mo偶e odbywa膰 si臋 bez 偶adnych ogranicze艅 !!!
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 15
UWAGI DOTYCZCE TWORZENIA PODZAPYTAC
" Wewn臋trzne zapytania nale偶y ujmowa膰 w nawiasy i musz膮 one wyst膮pi膰 po prawej
stronie warunku w zapytaniu nadrz臋dnym.
" Konieczna jest zgodno艣膰 kolejno艣ci, ilo艣ci i typu kolumn wyst臋puj膮cych w podzapytaniu
z ilo艣ci膮 i typem kolumn, znajduj膮cych si臋 w zapytaniu nadrz臋dnym.
" Podzapytania nie mog膮 zawiera膰 klauzuli sortowania ORDER BY. Mo偶e ona wyst膮pi膰
jedynie w zapytaniu g艂贸wnym.
" Zapytania zagnie偶d偶one wykonywane s膮 w kolejno艣ci od najbardziej wewn臋trznego do
zapytania g艂贸wnego.
" Tworzenie kolejnych podzapyta艅 wymaga stosowania operator贸w SQL oraz operator贸w
ANY lub ALL.
PODZAPYTANIA SKORELOWANE
" Elementem klauzuli WHERE lub HAVING podzapytania jest kolumna wyst臋puj膮ca w
zapytaniu bezpo艣rednio nadrz臋dnym.
" Podzapytanie skorelowane jest wykonywane wielokrotnie tzn. dla ka偶dego rekordu
zapytania nadrz臋dnego.
" W podzapytaniu wyst臋puje odwo艂anie do warto艣ci p贸l rekordu z zapytania
nadrz臋dnego.
Przyk艂ady:
1/ SELECT Id_egzaminator, Id_student, Id_przedmiot, Data_egz FROM egzaminy e1 WHERE
Data_egz = (SELECT MAX(Data_egz) FROM egzaminy WHERE Id_przedmiot =
e1.Id_przedmiot);
2/ SELECT Id_student, Id_osrodek, Id_przedmiot, Data_egz, Zdal FROM egzaminy e1
WHERE Data_egz = (SELECT MAX(Data_egz) FROM egzaminy WHERE Id_przedmiot =
e1.Id_przedmiot AND Id_osrodek = e1.Id_osrodek) AND Zdal = 'Y' ORDER BY Id_osrodek,
Id_przedmiot, Data_egz;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 16
OPERATOR EXISTS W PODZAPYTANIACH SKORELOWANYCH
Operator EXISTS pozwala przeprowadza膰 kontrol臋 spe艂nienia okre艣lonego warunku u偶ytego
w podzapytaniu skorelowanym. Mo偶liwe jest tak偶e zaprzeczenie warunku w postaci NOT EXISTS.
Rezultat zastosowania operatora to warto艣膰 TRUE lub FALSE, w zale偶no艣ci od spe艂nienia b膮dz nie
okre艣lonego warunku.
Przyk艂ady:
1/ SELECT Id_przedmiot, Nazwa_p FROM przedmioty p WHERE NOT EXISTS
(SELECT Id_przedmiot FROM egzaminy e WHERE p.Id_przedmiot = e.Id_przedmiot);
2/ SELECT Id_student, Nazwisko, Imie FROM studenci s WHERE NOT EXISTS (SELECT
Id_student FROM egzamin e WHERE e.Id_student = s.Id_student);
3/ SELECT Id_egzaminator, Nazwisko, Imie FROM egzaminatorzy eg WHERE EXISTS
(SELECT Data_egz FROM egzaminy e WHERE e.Id_egzaminator = eg.Id_egzaminator);
EFEKTYWNO艢膯 WYKONYWANIA PODZAPYTAC
Szybko艣膰 wykonywania podzapyta艅 zale偶y w g艂贸wnej mierze od:
" wielko艣ci tabel,
" ilo艣ci zwracanych wierszy,
" istnienia indeks贸w dla p贸l u偶ytych w warunkach.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 17
POLECENIA JZYKA DDL
" CREATE
" ALTER
" DROP
J臋zyk DDL przeznaczony jest do:
" definiowania nowych tabel, perspektyw i indeks贸w
" modyfikowania struktury istniej膮cych tabel
" usuwania tabel, perspektyw i indeks贸w
" definiowania u偶ytkownik贸w BD
" definiowania praw do wykonywania operacji lub zbior贸w praw (tzw. r贸l)
" usuwania u偶ytkownik贸w BD, praw lub r贸l
ZASADY DEFINIOWANIA TABEL
Nazwa tabeli:
" musi rozpoczyna膰 si臋 od litery
" mo偶e zawiera膰 cyfry, znak podkre艣lenia, znaki specjalne $ i #; nie mo偶e w niej
wyst膮pi膰 znak spacji
" nie mo偶e by膰 d艂u偶sza ni偶 30 znak贸w
" musi by膰 jednoznaczna
" du偶e i ma艂e litery nie s膮 rozr贸偶niane
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 18
TWORZENIE TABEL - CREATE TABLE
Polecenie tworzy now膮 pust膮 tabel臋.
CREATE TABLE tabela
(kolumna_1 typ_kol1 [option1],
kolumna_2 typ_kol2 [option2],...,
kolumna_n typ_koln [optionn],
definicje_war_integralno艣ci)
Opis ka偶dej kolumny mo偶e ponadto zawiera膰 pewne opcje, dotycz膮ce:
a) domy艣lnej warto艣ci pocz膮tkowej - DEFAULT war_pocz
b) mo偶liwo艣ci przyjmowania b膮dz nie warto艣ci NULL (domy艣lnie przyjmuje si臋 NULL)
c) definiowania klucza g艂贸wnego tabeli - PRIMARY KEY
d) okre艣lania unikalnych warto艣ci w kolumnie - UNIQUE
e) kontroli warto艣ci wprowadzanych do kolumny - CHECK (warunek)
f) informacje o utworzonej tabeli mo偶na uzyska膰 wydaj膮c polecenie
DESC nazwa_tabeli
Przyk艂ady:
1/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1) PRIMARY KEY,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL);
2/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1),
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL,
PRIMARY KEY(Id_przedmiot), UNIQUE(Nazwa_p, Opis));
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 19
DEFINIOWANIE TABEL W OPARCIU O WZORZEC INNEJ TABELI
CREATE TABLE tabela [(kol1, kol2, ..., koln)]
AS SELECT zapytanie
Przyk艂ady:
1/ CREATE TABLE kopia_przedmioty AS
SELECT Id_przedmiot, Nazwa_p FROM przedmioty;
2/ CREATE TABLE kopia_osrodki (Nr_osr, Nazwa_osr) AS
SELECT Id_osrodek, Nazwa_o FROM osrodki WHERE Miasto = 'Lublin';
Uwagi dotycz膮ce tworzenia tabel wg wzorca:
" Utworzona tabela zawiera kolumny wskazane na li艣cie polecenia SELECT.
" Je艣li nie okre艣lono nazw kolumn w tworzonej tabeli (przyk艂ad 1), domy艣lnie
otrzymaj膮 one nazwy kolumn pochodz膮ce ze wzorca.
" Je艣li podano list臋 nazw kolumn w tworzonej tabeli, ilo艣膰 kolumn na tej li艣cie musi by膰
r贸wna ilo艣ci kolumn na li艣cie polecenia SELECT.
" Na li艣cie polecenia SELECT nie mog膮 wyst膮pi膰 wyra偶enia, je艣li nie podano nazwy
kolumny w tworzonej tabeli (konieczne jest opisanie wyra偶enia za pomoc膮 aliasu).
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 20
DEFINIOWANIE WI Z脫W INTEGRALNO艢 CI - CONSTRAINT
" wyst臋powanie warto艣ci r贸偶nych od NULL
" wyst臋powanie unikalnych warto艣ci w kolumnie (kolumnach) - UNIQUE
" wskazanie kolumny b臋d膮cej kluczem podstawowym:
CONSTRAINT nazwa_wi臋zu PRIMARY KEY (koli, kolj) lub
CONSTRAINT nazwa_wi臋zu PRIMARY KEY
" wskazanie klucza obcego jako zwi膮zku z inna tabel膮:
CONSTRAINT nazwa_wi臋zu FOREIGN KEY (koli) REFERENCES
tabela(kolumna)
" usuwanie warto艣ci p贸l z tabel pozostaj膮cych w zwi膮zku FOREIGN KEY:
CONSTRAINT nazwa_wi臋zu FOREIGN KEY (koli) REFERENCES
tabela(kolumna) ON DELETE CASCADE
" spe艂nianie przez warto艣ci kolumny okre艣lonego warunku:
CONSTRAINT nazwa_wi臋zu CHECK (warunek)
Wi臋zy integralno艣ci mog膮 by膰 definiowane na poziomie:
" kolumny (NOT NULL, PRIMARY KEY, UNIQUE, CHECK)
" tabeli (CHECK, FOREIGN KEY, PRIMARY KEY, UNIQUE)
Przyk艂ady:
1/ CREATE TABLE osrodki
(Id_osrodek NUMBER(5) CONSTRAINT osr_Id_osrodek_nn NOT NULL,
Nazwa_o VARCHAR2(30) CONSTRAINT osr_nazwa_nn NOT NULL,
Kod VARCHAR2(5),
Miasto VARCHAR2(15),
Ulica VARCHAR2(30),
Numer VARCHAR2(8),
CONSTRAINT osr_Id_osrodek_pk PRIMARY KEY(Id_osrodek));
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 21
2/ CREATE TABLE egzaminy
(Nr_egz NUMBER(7)
CONSTRAINT egin_nr_egz_nn NOT NULL,
Id_student VARCHAR2(7)
CONSTRAINT egin_Id_student_nn NOT NULL,
Id_przedmiot NUMBER(1)
CONSTRAINT egin_Id_przedmiot_nn NOT NULL,
Id_egzaminator VARCHAR2(4)
CONSTRAINT egin_Id_egzaminator_nn NOT NULL,
Data_egz DATE,
Id_osrodki NUMBER(5)
CONSTRAINT egin_Id_osrodek_nn NOT NULL,
Zdal VARCHAR2(1)
CONSTRAINT egin_zdal_check CHECK(Zdal IN ('Y', 'N')),
CONSTRAINT egin_nr_egz_pk PRIMARY KEY (Nr_egz),
CONSTRAINT egin_nr_egz_check CHECK(Nr_egz > 0),
CONSTRAINT egin_Id_student_fk FOREIGN KEY (Id_student) REFERENCES
studenci (Id_student),
CONSTRAINT egin_Id_przedmiot_fk FOREIGN KEY (Id_przedmiot) REFERENCES
przedmioty (Id_przedmiot),
CONSTRAINT egin_Id_egzaminator_fk FOREIGN KEY (Id_egzaminator)
REFERENCES egzaminatorzy (Id_egzaminator),
CONSTRAINT egin_Id_osrodek_fk FOREIGN KEY (Id_osrodek) REFERENCES
osrodki (Id_osrodek) ON DELETE CASCADE);
MODYFIKACJA DEFINICJI TABEL - ALTER TABLE
Modyfikacja definicji tabeli obejmuje:
" dodanie nowych kolumn
" zmiany typu, rozmiaru, warto艣ci domy艣lnej kolumn lub warunku NOT NULL
" dodanie/usuni臋cie wi臋z贸w integralno艣ci (kolumn lub tabeli)
" aktywacj臋/deaktywacj臋 wi臋z贸w integralno艣ci
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 22
ALTER TABLE tabela
ADD (kol1 typ_kol1 [opt1], kol2 typ_kol2 [opt2], ...)
MODIFY (kolumna kol_typ [opt])
ALTER TABLE tabela
ADD CONSTRAINT nazwa_wi臋zu definicja_wi臋zu
DROP CONSTRAINT nazwa_wi臋zu [CASCADE]
DROP PRIMARY KEY [CASCADE]
DROP UNIQUE(kol1, kol2) [CASCADE]
ENABLE CONSTRAINT nazwa_wi臋zu
DISABLE CONSTRAINT nazwa_wi臋zu
Przyk艂ady:
1/ ALTER TABLE egzaminatorzy
ADD (Pensja NUMBER(7) DEFAULT 100,
Data_ur DATE NOT NULL);
2/ ALTER TABLE egzaminatorzy
ADD CONSTRAINT egz_pensja CHECK(Pensja > 0);
3/ ALTER TABLE egzaminatorzy
ADD (Miejsce_pracy VARCHAR2(40))
MODIFY (Pensja NUMBER(8,2));
4/ ALTER TABLE egzaminatorzy
MODIFY (Pensja DEFAULT 500);
5/ ALTER TABLE osrodki
DROP CONSTRAINT osr_nazwa_uk;
6/ ALTER TABLE osrodki
DROP PRIMARY KEY CASCADE;
7/ ALTER TABLE osrodki
DISABLE CONSTRAINT osr_Id_osrodek_pk;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 23
OGRANICZENIA MODYFIKACJI TABEL
" Konieczne jest posiadanie praw ALTER TABLE do tabeli lub ALTER ANY TABLE.
" Dodanie nowej kolumny, dla kt贸rej musi by膰 spe艂niony warunek NOT NULL
mo偶liwe jest, gdy tabela nie zawiera 偶adnych rekord贸w; je艣li tabela zawiera rekordy
nale偶y wprowadzi膰 dane do wstawionej kolumny a nast臋pnie zmieni膰 jej w艂asno艣膰 na
NOT NULL.
" Modyfikacja kolumn poprzez zmian臋 typ贸w danych i zmniejszenie rozmiaru mo偶liwa
jest, je艣li dla wszystkich rekord贸w warto艣ci w tych kolumnach s膮 r贸wne NULL.
" Zawsze mo偶liwe jest zwi臋kszenie rozmiaru typu danych znakowych lub
numerycznych.
" Zmiana warto艣ci domy艣lnej w kolumnie przy pomocy parametru DEFAULT nie
wp艂ywa na warto艣ci ju偶 przechowywane w BD.
" Modyfikacja istniej膮cych wi臋z贸w mo偶e polega膰 jedynie na wprowadzeniu warunku
NOT NULL, przy za艂o偶eniu, 偶e dane zgromadzone w BD we wskazanej kolumnie nie
s膮 r贸wne NULL.
" Nie mo偶na usun膮膰 wi臋z贸w definiuj膮cych zwi膮zki mi臋dzy tabelami opartych na
indeksach typu PRIMARY KEY lub UNIQUE bez usuni臋cia odpowiedniego klucza
obcego; konieczne jest u偶ycie opcji CASCADE.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 24
AKTYWACJA/DEAKTYWACJA WI Z脫W INTEGRALNO艢 CI
" definicja wi臋z贸w integralno艣ci przechowywana jest w BD
" domy艣lnie wi臋zy integralno艣ci s膮 aktywne i umo偶liwiaj膮 kontrol臋 poprawno艣ci
wprowadzania danych
" wi臋zy integralno艣ci mog膮 nie by膰 sprawdzane, je艣li b臋d膮 nieaktywne
" aktywacja/deaktywacja wi臋z贸w mo偶e nast膮pi膰 na etapie definiowania (CREATE
TABLE) lub modyfikowania tabeli (ALTER TABLE)
Aktywacja wi臋z贸w:
ENABLE PRIMARY KEY | UNIQUE(kol1,...) | CONSTRAINT nazwa_wi臋zu
Przyk艂ady:
1/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1) PRIMARY KEY,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL)
ENABLE PRIMARY KEY;
2/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1) PRIMARY KEY,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL);
ALTER TABLE przedmioty ENABLE PRIMARY KEY;
3/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1)
CONSTRAINT prz_Id_przedmiot_pk PRIMARY KEY DISABLE,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL);
ALTER TABLE przedmioty ENABLE CONSTRAINT prz_Id_przedmiot_pk;
4/ ALTER TABLE egzaminy ENABLE CONSTRAINT egin_Id_student_fk;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 25
Uwagi dotycz膮ce aktywacji wi臋z贸w:
" Aktywacja wi臋z贸w dla tabeli zawieraj膮cych rekordy mo偶e nast膮pi膰 tylko w贸wczas,
gdy wszystkie rekordy spe艂niaj膮 podane warunki integralno艣ci.
" Aktywacja wi臋z贸w typu PRIMARY KEY lub UNIQUE powoduje utworzenie
odpowiednich indeks贸w (przyk艂ad 3) - wymagane jest posiadanie prawa CREATE
INDEX lub CREATE ANY INDEX.
" Aktywacja wi臋z贸w definiuj膮cych zwi膮zek tabeli z innymi tabelami wymaga istnienia
aktywnych wi臋z贸w w tabelach powi膮zanych (przyk艂ad 4).
Deaktywacja wi臋z贸w:
DISABLE PRIMARY KEY | UNIQUE(kol1,...) | CONSTRAINT nazwa_wi臋zu
Przyk艂ady:
1/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1) PRIMARY KEY,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL)
DISABLE PRIMARY KEY;
2/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1) PRIMARY KEY,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL);
ALTER TABLE przedmioty DISABLE PRIMARY KEY;
3/ CREATE TABLE przedmioty (Id_przedmiot NUMBER(1)
CONSTRAINT prz_Id_przedmiot_pk PRIMARY KEY,
Nazwa_p VARCHAR2(40) NOT NULL,
Opis VARCHAR2(200) NOT NULL);
ALTER TABLE przedmioty DISABLE CONSTRAINT prz_Id_przedmiot_pk CASCADE;
4/ ALTER TABLE studenci DISABLE CONSTRAINT st_Id_stud_pk CASCADE;
5/ ALTER TABLE egzaminatorzy ADD (CONSTRAINT egz_pensja CHECK(Pensja > 500))
DISABLE CONSTRAINT egz_pensja;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 26
Uwagi dotycz膮ce deaktywacji wi臋z贸w:
" Deaktywacja wi臋z贸w nie powoduje usuni臋cia ich definicji z BD.
" Definicja wi臋z贸w i ich deaktywacja w tej samej instrukcji dla tabeli zawieraj膮cych
rekordy nie wymusza kontroli danych istniej膮cych w tabeli.
" Deaktywacja wi臋z贸w typu PRIMARY KEY lub UNIQUE powoduje usuni臋cie z BD
odpowiednich indeks贸w (przyk艂ad 4) - wymagane jest posiadanie prawa DROP
INDEX lub DROP ANY INDEX.
" Deaktywacja wi臋z贸w definiuj膮cych zwi膮zek tabeli z innymi tabelami wymaga
usuni臋cia aktywnych wi臋z贸w w tabelach powi膮zanych przy u偶yciu opcji CASCADE
(przyk艂ad 4).
USUNI CIE TABEL - DROP TABLE
DROP TABLE tabela [CASCADE CONSTRAINTS]
Uwagi dotycz膮ce usuwania tabel:
" Konieczne jest posiadanie prawa DROP TABLE do danej tabeli lub prawa DROP
ANY TABLE.
" Usuwane s膮 wszystkie indeksy skojarzone z tabel膮.
" Wszystkie perspektywy oparte na tabeli trac膮 sens, jednak ich definicja nie jest
usuwana z BD.
" Je艣li dla usuwanej tabeli zdefiniowane s膮 zwi膮zki oparte na indeksach typu
PRIMARY KEY lub UNIQUE, nale偶y je r贸wnie偶 usun膮膰 u偶ywaj膮c opcji CASCADE
CONSTRAINTS; w przeciwnym razie tabela nie zostanie usuni臋ta, a SZRBD
ORACLE sygnalizuje b艂膮d wykonania instrukcji.
Przyk艂ady:
1/ DROP TABLE egzaminatorzy;
2/ DROP TABLE osrodki CASCADE CONSTRAINTS;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 27
INNE POLECENIA J ZYKA DDL
COMMENT - wprowadzenie komentarza dotycz膮cego tabeli, perspektywy lub kolumny
Przyk艂ady:
1/ COMMENT ON TABLE egzaminatorzy IS 'Lista egzaminator贸w ECDL';
2/ COMMENT ON COLUMN przedmioty.Opis IS 'Szczeg贸艂owy opis modu艂u';
RENAME - zmiana nazwy obiektu bazy danych (tabeli, perspektywy)
Przyk艂ad:
RENAME TABLE egzaminatorzy TO egzaminator;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 28
POLECENIA JZYKA DML
" INSERT
" UPDATE
" DELETE
J臋zyk DML przeznaczony jest do:
" wstawiania nowych rekord贸w do tabel
" modyfikowania istniej膮cych rekord贸w
" usuwania rekord贸w z tabel
WSTAWIANIE REKORD脫W - INSERT
Wstawienie jednego rekordu:
INSERT INTO tabela [(kol1, kol2,..., koln)]
VALUES (wart1, wart2,..., wartn)
gdzie: tabela - nazwa tabeli, w kt贸rej wstawiany b臋dzie nowy rekord
kol1,.., koln - nazwy kolumn tabeli
wart1,..., wartn - warto艣ci wstawiane odpowiednio do kolumn kol1,..., koln
Wstawienie wielu rekord贸w:
INSERT INTO tabela1 [(kol1, kol2,..., koln)]
SELECT koli, kolj,...,kolo
FROM tabela2
[WHERE warunek]
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 29
Przyk艂ady:
1/ INSERT INTO studenci
VALUES ('0000049', 'Szafra艅ska', 'Agnieszka', '17-04-77', 'Lublin', '17047701583', '20145',
'Lublin', 'Daszy艅skiego', '19/119', NULL, NULL, NULL, NULL, NULL);
2/ INSERT INTO osrodki (Id_osrodek, Nazwa_o, Miasto, Ulica)
VALUES (1, 'CKMP', 'Lublin', 'Bursaki');
3/ INSERT INTO przedmioty SELECT * FROM kopia_przedmioty;
4/ INSERT INTO przedmioty (Id_przedmiot, Nazwa_p) SELECT Id_przedmiot, Nazwa_p FROM
kopia_przedmioty;
5/ INSERT INTO egzaminy (Nr_egz, Id_student, Id_przedmiot, Id_egzaminator, Data_egz,
Id_osrodek) VALUES (1, '0000049', 1, '0036', '20-08-98', 1);
Uwagi dotycz膮ce wstawianie rekord贸w:
" Wymagane posiadanie prawa INSERT do danej tabeli lub INSERT ANY TABLE.
" Wstawianie warto艣ci typu znakowego lub daty wymaga umieszczenia ich pomi臋dzy
apostrofami (przyk艂ad 1).
" Je艣li polecenie INSERT zawiera list臋 kolumn, to ich liczba musi by膰 r贸wna liczbie
wstawianych warto艣ci w klauzuli VALUES lub liczbie kolumn na li艣cie polecenia
SELECT (przyk艂ad 2).
" Pomini臋cie listy kolumn w poleceniu INSERT wymaga podania warto艣ci dla ka偶dej
kolumn (przyk艂ad 1).
" Wstawianie rekord贸w przy pomocy polecenia SELECT musi odbywa膰 si臋 przy
zachowaniu zgodno艣ci typu wstawianych danych i typu odpowiednich kolumn.
" Brak listy kolumn w poleceniu INSERT i skojarzonym z nim poleceniu SELECT
wymaga istnienia wewn臋trznej zgodno艣ci kolejno艣ci kolumn, okre艣lonej na etapie
definiowania tabel (przyk艂ad 3).
" Pomini臋cie kolumny na li艣cie polecenia INSERT powoduje przypisanie warto艣ci NULL
lub warto艣ci okre艣lonej parametrem DEFAULT na etapie definiowania tabeli
(przyk艂ad 5).
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 30
MODYFIKACJA REKORD脫W - UPDATE
UPDATE tabela SET kol1 = wart1, kol2 = wart2,..., koln = wartn
[ WHERE warunek ]
UPDATE tabela1 SET kol1 = (SELECT koli FROM tabela2)
[ WHERE warunek ]
UPDATE tabela1 SET (kol1, kol2) = (SELECT koli, kolj FROM tabela2)
[ WHERE warunek ]
gdzie: tabela - nazwa tabeli, w kt贸rej modyfikowane b臋d膮 rekordy
kol1, kol2,..., koln - nazwy kolumn tabeli modyfikowanej
wart1,..., wartn - warto艣ci podstawiane odpowiednio do kolumn kol1,..., koln
warunek - warunek, jaki musz膮 spe艂nia膰 modyfikowane rekordy
Przyk艂ady:
1/ UPDATE studenci SET Nazwisko = 'Nowak' WHERE Id_student = '0000049';
2/ UPDATE studenci st SET Nr_ECDL = Id_student WHERE 7 = ANY (SELECT COUNT(*)
FROM egzaminy e GROUP BY Id_student, Zdal HAVING e.Id_student = st.Id_student AND
Zdal = 'Y');
3/ UPDATE egzaminy SET Id_osrodek = (SELECT Id_osrodek FROM osrodki WHERE Nazwa_o
= 'WSPA' ) WHERE Id_osrodek IN (SELECT Id_osrodek FROM osrodki WHERE Nazwa_o =
'CKMP') AND Data_egz > '16-08-98';
Uwagi dotycz膮ce modyfikacji rekord贸w:
" Wymagane posiadania prawa UPDATE do tabeli lub UPDATE ANY TABLE.
" Klauzula WHERE ogranicza ilo艣膰 modyfikowanych rekord贸w.
" Polecenie UPDATE mo偶e zawiera膰 zapytania zagnied偶one lub skorelowane do
okre艣lania warto艣ci wstawianych do kolumn.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 31
USUWANIE REKORD脫W - DELETE
DELETE FROM tabela [ WHERE warunek ]
gdzie: tabela - nazwa tabeli, z kt贸rej usuwane b臋d膮 rekordy
warunek - warunek, jaki musz膮 spe艂nia膰 usuwane rekordy
Uwagi dotycz膮ce usuwania rekord贸w:
" Wymagane posiadanie prawa DELETE do danej tabeli lub DELETE ANY TABLE.
" Klauzula WHERE ogranicza ilo艣膰 usuwanych rekord贸w.
Przyk艂ad:
DELETE FROM studenci WHERE Nr_ECDL IS NOT NULL;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 32
PERSPEKTYWY
Perspektywa (ang. view):
" to obiekt podobny do okna dynamicznego, przez kt贸re u偶ytkownicy mog膮 widzie膰
dan膮 tabel臋
" wirtualna tabela tzn. nie istniej膮ca fizycznie w bazie danych (przechowywana jest
wy艂膮cznie definicja perspektywy), przez u偶ytkownika widziana jest jak "normalna"
tabela
" definiowana jest w oparciu o bazow膮 tabel臋 lub inn膮 perspektyw臋
" nie zawiera danych fizycznych, lecz operuje na danych z tabeli bazowej
Perspektywy definiuje si臋 dla:
" ograniczenia dost臋pu do wszystkich danych tabeli; ka偶dy u偶ytkownik widzi tylko
cz臋艣膰 danych, kt贸re go interesuj膮
" u艂atwienia dost臋pu do danych w tabeli, poprzez uproszczenie zapyta艅
" unikni臋cia konieczno艣ci znajomo艣ci ca艂ej struktury tabel w bazie danych
" umo偶liwienia widzenia informacji w r贸偶ny spos贸b przez wielu u偶ytkownik贸w
" zapewnienia kontroli poprawno艣ci wprowadzanych i modyfikowanych danych
Rodzaje perspektyw:
1/ perspektywy proste - oparte wy艂膮cznie na jednej tabeli bazowej i nie zawieraj膮ce
w swojej definicji funkcji i klauzuli GROUP BY
2/ perspektywy z艂o偶one - oparte na kilku tabelach i/lub zawieraj膮ce
w swojej definicji funkcje i klauzul臋 GROUP BY
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 33
TWORZENIE PERSPEKTYW - CREATE VIEW
CREATE [FORCE | NO FORCE] VIEW nazwa_perspektywy [kol1, kol2, ...]
AS SELECT zapytanie
CREATE VIEW nazwa_perspektywy [kol1, kol2, ..., alias_wyra偶enia]
AS SELECT zapytanie WITH CHECK OPTION | WITH READ ONLY
CREATE OR REPLACE VIEW nazwa_perspektywy
AS SELECT zapytanie WITH CHECK OPTION CONSTRAINT nazwa_wi臋zu
Uwagi dotycz膮ce tworzenia perspektyw:
" Wymagane jest posiadanie praw CREATE VIEW lub CREATE ANY VIEW.
" Perspektyw臋 mo偶na utworzy膰 niezale偶nie od faktu istnienia tabeli bazowej lub
posiadania praw do schematu danych u偶ytkownika BD (klauzula FORCE).
" Definicja perspektywy mo偶e zawiera膰 list臋 kolumn, kt贸rych ilo艣膰 musi by膰 zgodna
z ilo艣ci膮 kolumn na li艣cie polecenia SELECT.
" Definicja perspektywy musi zawiera膰 nazwy kolumn, je艣li lista polecenia SELECT
zawiera funkcje lub wyra偶enia, dla kt贸rych nie wyst臋puj膮 aliasy na tych pozycjach.
" Polecenie SELECT w definicji perspektywy nie mo偶e zawiera膰 klauzuli ORDER BY.
" Definicja perspektywy mo偶e ogranicza膰 rodzaje operacji wykonywanych na tabeli
bazowej lub innej perspektywie (WITH READ ONLY - tylko odczyt rekord贸w).
" Na etapie definicji perspektywy mo偶liwe jest okre艣lenie warunku, jaki b臋d膮 musia艂y
spe艂nia膰 dane wprowadzane przez perspektyw臋 do tabeli bazowej (klauzula WITH
CHECK OPTION); u偶ycie CONSTRAINT pozwala nazwa膰 powy偶szy warunek.
" Modyfikacja definicji perspektywy wymaga u偶ycia klauzuli OR REPLACE.
" Zaleca si臋 stosowanie listy kolumn w poleceniu SELECT definiuj膮cym perspektyw臋.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 34
Przyk艂ady:
1/ CREATE VIEW student_form_we AS SELECT Id_student, Nazwisko, Imie, Data_ur, Miejsce,
PESEL, Kod, Miasto, Ulica, Numer FROM studenci;
2/ CREATE VIEW osr_lublin AS SELECT Id_osrodek, Nazwa_o, Miasto, Ulica, Numer FROM
osrodki WHERE Miasto = 'Lublin' WITH CHECK OPTION CONSTRAINT o_lublin;
3/ CREATE VIEW egzaminy_ecdl AS SELECT Nr_egz, Nazwisko, Imie, Nazwa_p FROM
egzaminy e, studenci st, przedmioty p WHERE e.Id_student = st.Id_student AND e.Id_przedmiot
= p.Id_przedmiot;
4/ CREATE VIEW l_egzamin (Id_egzaminator, l_egz) AS SELECT Id_egzaminator, COUNT(*)
FROM egzaminy GROUP BY Id_egzaminator;
5/ CREATE VIEW l_prob AS SELECT Id_student, COUNT(*) Proby FROM egzaminy GROUP
BY Id_student;
6/ CREATE VIEW egzaminy_lublin AS SELECT Nr_egz, Id_student, Id_przedmiot,
Id_egzaminator, Data_egz, Id_osrodek, Zdal FROM egzaminy WHERE Id_osrodek = ANY
(SELECT Id_osrodek FROM osrodki WHERE Miasto = 'Lublin') WITH CHECK OPTION;
USUWANIE PERSPEKTYW - DROP VIEW
DROP VIEW nazwa_perspektywy
Uwagi dotycz膮ce usuwania perspektyw:
" Wymagane jest posiadanie praw do schematu danych u偶ytkownika lub prawa
DROP ANY VIEW.
" Usuni臋cie perspektywy, na kt贸rej oparto inne perspektywy nie powoduje
automatycznego ich usuni臋ci膮 z BD; trac膮 one jednak sens.
Przyk艂ad:
DROP VIEW student_form_we;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 35
MODYFIKACJA TABEL POPRZEZ PERSPEKTYWY
1. Odbywa si臋 poprzez zastosowanie polece艅 INSERT, UPDATE i DELETE
2. Usuwanie rekord贸w przez perspektyw臋 jest mo偶liwe tylko w贸wczas, gdy:
" definicja perspektywy nie zawiera w instrukcji SELECT klauzul DISTINCT,
GROUP BY, HAVING
" modyfikowalna jest perspektywa, na kt贸rej oparto definicj臋 danej perspektywy
" perspektywa oparta jest tylko na jednej tabeli
" klauzula WHERE nie zawiera podzapytania skorelowanego
3. Modyfikacja rekord贸w mo偶liwa jest, je艣li:
" spe艂nione s膮 w/w warunki
" dane wprowadzane to tabeli poprzez perspektyw臋 spe艂niaj膮 warunek podany
w definicji perspektywy, o ile u偶yto klauzuli WITH CHECK OPTION
" na li艣cie polecenia SELECT nie wyst臋puj膮 wyra偶enia, sta艂e lub funkcje grupowe
4. Wstawienie rekord贸w mo偶liwe jest, je艣li:
" spe艂nione s膮 w/w warunki
" definicja perspektywy zawiera kolumny, kt贸re musz膮 przyjmowa膰 warto艣ci
r贸偶ne od NULL
Przyk艂ady:
1/ INSERT INTO student_form_we
VALUES ('0000049', 'Szafra艅ska', 'Agnieszka', '17-04-77', 'Lublin', '17047701583', '20145',
'Lublin', 'Daszy艅skiego', '19/119');
2/ INSERT INTO osr_lublin VALUES (3, 'LBS', '20950', 'Lublin', 'Plac Wolno艣ci', '1');
3/ INSERT INTO egzaminy_lublin VALUES (10, '0000049', 1, '0036', '20-09-98', 3);
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 36
INDEKSY
Rodzaje indeks贸w:
" PRIMARY KEY - indeks podstawowy (jednoznaczna identyfikacja rekord贸w)
" UNIQUE - indeks unikalny (niepowtarzalno艣膰 danych w kolumnie lub kolumnach)
" NON UNIQUE - indeks zwi臋kszaj膮cy szybko艣膰 dost臋pu do rekord贸w
Przypadki, w kt贸rych powinno tworzy膰 si臋 indeksy:
" przyspieszenie dost臋pu do danych w przypadku du偶ej liczby wierszy
" tworzenie indeks贸w dla kolumn, dla kt贸rych powinno zapewni膰 si臋 warto艣ci
niepowtarzalne
" tworzenie indeks贸w dla kolumn cz臋sto u偶ywanych w klauzulach WHERE,
szczeg贸lnie tych, kt贸re u偶ywane s膮 jako kolumny 艂膮cz膮ce
Ograniczenia wynikaj膮ce z istnienia indeks贸w:
" indeksy spowalniaj膮 wykonywanie operacji typu INSERT, UPDATE i DELETE
" je艣li to mo偶liwe, tworzenie indeksu dla tabel powinno by膰 wykonywane po
wstawieniu rekord贸w
" max liczba kolumn w definicji indeksu wynosi 16
" dana kombinacja kolumn mo偶e pojawi膰 si臋 w definicji indeksu tylko jeden raz
" ka偶dy nowy indeks tabeli wyd艂u偶a czas przetwarzania danych
" warto艣ci NULL nie s膮 indeksowane
Sposoby tworzenia indeks贸w:
" na etapie definiowania tabeli (indeks typu PRIMARY KEY, UNIQUE)
" przy pomocy osobnych instrukcji (indeks typu UNIQUE, NON UNIQUE)
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 37
TWORZENIE INDEKS脫W - CREATE INDEX
CREATE [UNIQUE] INDEX nazwa_indeksu ON tabela (kol1,..., koln)
Uwagi dotycz膮ce tworzenia indeks贸w:
" Utworzenie indeksu wymaga posiadania prawa w艂asno艣ci danej tabeli lub prawa
typu INDEX do danej tabeli lub prawa CREATE ANY INDEX.
" Dodatkowo konieczna jest odpowiednia ilo艣膰 przestrzeni BD lub posiadanie prawa
UNLIMITED TABLESPACE.
" Polecenie nie tworzy indeksu typu PRIMARY KEY.
Przyk艂ady:
1/ CREATE INDEX i_osrodki_nazwa ON osrodek (nazwa_o);
2/ CREATE UNIQUE INDEX i_przedmiot_nazwa ON przedmiot (nazwa_p);
USUWANIE INDEKS脫W - DROP INDEX
DROP INDEX nazwa_indeksu
gdzie: nazwa_indeksu - nazwa indeksu, kt贸ry zostanie usuni臋ty
Przyk艂ad:
DROP INDEX i_osrodki_nazwa;
Uwaga:
Polecenie DROP INDEX pozwala usun膮膰 tylko te indeksy, kt贸re zosta艂y utworzone przy
pomocy instrukcji CREATE INDEX !!!
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 38
SEKWENCJE
Sekwencja - obiekt bazy danych, umo偶liwiaj膮cy generowanie unikalnych
kolejnych warto艣ci liczbowych
Sekwencje tworzone s膮 w celu automatycznego generowania unikalnych warto艣ci dla
kluczy typu PRIMARY KEY lub UNIQUE
Sekwencja sk艂ada si臋 z dw贸ch tzw. pseudokolumn:
CURRVAL - informacja o bie偶膮cym numerze przechowywanym w sekwencji
NEXTVAL - inkrementacja sekwencji i generowanie nowej warto艣ci
Pseudokolumny wykorzystywane s膮:
" na li艣cie kolumn instrukcji SELECT wy艣wietlaj膮cej informacje z tabel
" na li艣cie kolumn instrukcji SELECT u偶ytej w poleceniu INSERT
" jako element klauzuli VALUES polecenia INSERT
" jako element klauzuli SET w poleceniu UPDATE
Pseudokolumn nie wolno u偶ywa膰 w:
" podzapytaniach wyst臋puj膮cych w instrukcjach SELECT, UPDATE, DELETE
" definicjach perspektyw
" poleceniu SELECT zawieraj膮cym operator DISTINCT, klauzule GROUP BY lub
ORDER BY
" operacji z艂膮czenia tabel za pomoc膮 operator贸w UNION, INTERSECT lub MINUS
" warunkach definiowanych po klauzuli WHERE
" definicji wi臋z贸w integralno艣ci typu CHECK
" nadawaniu warto艣ci domy艣lnych p贸l w poleceniach CREATE TABLE lub ALTER
TABLE
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 39
TWORZENIE SEKWENCJI - CREATE SEQUENCE
CREATE SEQUENCE nazwa_sekwencji
INCREMENT BY liczba_ca艂kowita
START WITH liczba_ca艂kowita
MAXVALUE liczba_ca艂kowita | NOMAXVALUE
MINVALUE liczba_ca艂kowita | NOMINVALUE
CYCLE | NOCYCLE
CACHE liczba_ca艂kowita | NOCACHE
Uwagi dotycz膮ce tworzenia sekwencji:
" Definicja sekwencji wymaga posiadania prawa CREATE SEQUENCE lub CREATE
ANY SEQUENCE.
" W definicji sekwencji mo偶na okre艣li膰 pierwsz膮 generowan膮 liczb臋 (START WITH),
krok inkrementacji (INCREMENT BY), minimaln膮 (MINVALUE) i maksymaln膮
generowan膮 warto艣膰 ca艂kowit膮 (MAXVALUE), spos贸b zachowania si臋 sekwencji w
momencie osi膮gni臋cia warto艣ci granicznej (CYCLE) oraz ilo艣膰 kolejnych warto艣ci
sekwencji przechowywanych w pami臋ci (CACHE).
Przyk艂ady:
1/ CREATE SEQUENCE s_przedmioty
MINVALUE 1
MAXVALUE 7
INCREMENT BY 1
START WITH 1
NOCYCLE;
2/ CREATE SEQUENCE s_egzaminy
MINVALUE 1
NOMAXVALUE
INCREMENT BY 1
START WITH 1
NOCYCLE;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 40
WYKORZYSTANIE SEKWENCJI
Przyk艂ady:
1/ INSERT INTO przedmioty VALUES (s_przedmioty.NEXTVAL, 'Edytory tekstu', NULL);
2/ SELECT s_przedmioty.CURRVAL, s_przedmioty.NEXTVAL, s_przedmioty.NEXTVAL FROM
sys.dual;
3/ UPDATE egzaminy SET Nr_egz = s_egzaminy.CURRVAL;
Uwagi dotycz膮ce wykorzystania sekwencji:
" Dane sekwencja mo偶e by膰 wykorzystywana jednocze艣nie przez wiele tabel i przez
wielu u偶ytkownik贸w.
" Ka偶demu u偶ytkownikowi przydzielana jest niepowtarzalna warto艣膰 generowana
przez sekwencj臋.
" Przed pierwszym odwo艂aniem do CURRVAL nale偶y wykona膰 odwo艂anie do
NEXTVAL.
" Odwo艂anie do NEXTVAL powoduje umieszczenie nowej warto艣ci w CURRVAL.
" Wielokrotne odwo艂ania do pseudokolumny NEXTVAL w tym samym poleceniu SQL
zwraca zawsze t膮 sam膮 warto艣膰.
" Warto艣ci generowane przez sekwencje nie podlegaj膮 anulowaniu w sytuacji
wycofania transakcji.
" Jednoczesne wyst臋powanie odwo艂a艅 do CURRVAL i NEXTVAL zawsze prowadzi do
wy艣wietlenia tych samych warto艣ci, niezale偶nie od porz膮dku odwo艂a艅.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 41
MODYFIKACJA SEKWENCJI - ALTER SEQUENCE
ALTER SEQUENCE nazwa_sekwencji
INCREMENT BY liczba_ca艂kowita
MAXVALUE liczba_ca艂kowita | NOMAXVALUE
MINVALUE liczba_ca艂kowita | NOMINVALUE
CYCLE | NOCYCLE
CACHE liczba_ca艂kowita | NOCACHE
Uwagi dotycz膮ce modyfikacji sekwencji:
" Mo偶liwa przy posiadaniu prawa ALTER w odniesieniu do danej sekwencji lub
ALTER ANY SEQUENCE.
" Dotyczy zmiany kroku inkrementacji (INCREMENT BY), maksymalnej
(MAXVALUE) i minimalnej (MINVALUE) warto艣ci generowanej, liczby warto艣ci
przechowywanych w pami臋ci (CACHE) oraz sposobu zachowania si臋 w momencie
osi膮gni臋cia warto艣ci granicznej (CYCLE).
" Nie mo偶e prowadzi膰 do wewn臋trzych sprzeczno艣ci np. nowa warto艣膰 MAXVALUE
nie mo偶e by膰 mniejsza od ostatnio wygenerowanej warto艣ci.
" Nie wymusza ponownego generowania warto艣ci od przyj臋tej warto艣ci pocz膮tkowej
(sekwencj臋 nale偶y usun膮膰 i zdefiniowa膰 od nowa).
" Prowadzi do generowania nowych warto艣ci tylko dla operacji zachodz膮cych
w przysz艂o艣ci.
Przyk艂ady:
1/ ALTER SEQUENCE s_egzaminy INCREMENT BY 10;
2/ ALTER SEQUENCE s_przedmioty MAXVALUE 9;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 42
USUWANIE SEKWENCJI - DROP SEQUENCE
DROP SEQUENCE nazwa_sekwencji
Uwagi dotycz膮ce usuwania sekwencji:
" Mo偶liwe przy posiadaniu prawa ALTER ANY SEQUENCE lub prawa w艂asno艣ci
sekwencji.
Przyk艂ad:
DROP SEQUENCE s_przedmioty;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 43
INNE OBIEKTY BD ORACLE
Obiekty BD ORACLE:
" funkcje - podprogramy, kt贸rych rezultatem jest jedna warto艣膰
" procedury - podprogramy, kt贸rych rezultatem jest wiele warto艣ci
" triggery - procedury obs艂ugi zdarze艅
" pakiety - zbiory deklaracji i definicji funkcji, procedur, zmiennych, sta艂ych,
kursor贸w, wyj膮tk贸w i typ贸w
DEFINIOWANIE FUNKCJI - CREATE FUNCTION
CREATE [OR REPLACE] FUNCTION nazwa_fun (arg [IN | OUT | IN OUT] typ)
RETURN typ_rezultat IS | AS polecenia_PL_SQL
Uwagi dotycz膮ce definiowania funkcji:
" Wymagane jest posiadanie prawa systemowego CREATE PROCEDURE lub
CREATE ANY PROCEDURE.
" Definicja funkcji przechowywana jest w BD jako samodzielny obiekt.
" Funkcja jest zbiorem instrukcji j臋zyka PL/SQL.
" Mo偶liwa jest redefinicja funkcji bez konieczno艣ci jej usuwania, ponownego
definiowania i przyznawania praw do niej poprzez u偶ycie opcji OR REPLACE.
" Rodzaj argumentu funkcji okre艣la si臋 za pomoc膮 opcji IN (argument wej艣ciowy),
OUT (argument wyj艣ciowy) lub IN OUT (argument typu wej艣cie-wyj艣cie).
" Definicja funkcji musi zawiera膰 typ argumentu oraz typ rezultatu, jednak musi to
by膰 nazwa tzw. typu bazowego np. NUMBER, VARCHAR2 zamiast NUMBER(7)
lub VARCHAR2(25).
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 44
Przyk艂ad:
CREATE FUNCTION zlicz_egz (k_osr IN NUMBER) RETURN NUMBER
IS
l_egz NUMBER(3);
BEGIN
SELECT COUNT(Id_osrodek) INTO l_egz FROM egzaminy WHERE Id_osrodek = k_osr;
RETURN l_egz;
END;
REKOMPILACJA FUNKCJI - ALTER FUNCTION
ALTER FUNCTION nazwa_fun COMPILE
Uwagi dotycz膮ce rekompilacji funkcji:
" Mo偶liwa do przeprowadzenia przez u偶ytkownika, kt贸ry utworzy艂 funkcj臋 lub
wymagane jest posiadanie prawa systemowego ALTER ANY PROCEDURE.
" Dotyczy funkcji, kt贸rych definicja przechowywana jest w BD.
" Skr贸cenie czasu uruchamiania aplikacji.
" Pozwala unikn膮膰 b艂臋d贸w wykonania na etapie uruchamiania aplikacji.
Przyk艂ad:
ALTER FUNCTION zlicz_egz COMPILE;
USUNI CIE FUNKCJI - DROP FUNCTION
DROP FUNCTION nazwa_fun
Uwagi dotycz膮ce usuwania funkcji:
" Mo偶liwa do przeprowadzenia przez u偶ytkownika, kt贸ry utworzy艂 funkcj臋 lub
wymagane jest posiadanie prawa systemowego DROP ANY PROCEDURE.
" Usuwanie dotyczy funkcji, b臋d膮cych obiektami BD.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 45
DEFINIOWANIE PROCEDURY - CREATE PROCEDURE
CREATE [OR REPLACE] PROCEDURE nazwa_proc
(arg [IN | OUT | IN OUT] typ) IS | AS polecenia_PL_SQL
Uwagi dotycz膮ce definiowania procedury:
" Wymagane jest posiadanie prawa systemowego CREATE PROCEDURE we w艂asnym
schemacie lub CREATE ANY PROCEDURE.
" Definicja procedury przechowywana jest w BD jako samodzielny obiekt.
" Procedura jest zbiorem instrukcji j臋zyka PL/SQL.
" Mo偶liwa jest redefinicja procedury bez konieczno艣ci jej usuwania, ponownego
definiowania i przyznawania praw do niej poprzez u偶ycie opcji OR REPLACE
(wymagane jest posiadanie prawa systemowego REPLACE ANY PROCEDURE).
Przyk艂ad:
CREATE PROCEDURE akt_ECDL (k_EKUK IN VARCHAR2) AS BEGIN
UPDATE studenci SET Nr_ECDL = Id_student WHERE Id_student = k_EKUK;
END;
REKOMPILACJA PROCEDUR - ALTER PROCEDURE
ALTER PROCEDURE nazwa_proc COMPILE
Uwagi dotycz膮ce rekompilacji procedur:
" Mo偶liwa do przeprowadzenia przez u偶ytkownika, kt贸ry utworzy艂 procedur臋 lub
wymagane jest posiadanie prawa systemowego ALTER ANY PROCEDURE.
" Dotyczy procedur, kt贸rych definicja przechowywana jest w BD.
" ORACLE przeprowadza jednocze艣nie kontrol臋 wszystkich innych obiekt贸w BD,
kt贸re wykorzystuj膮 kompilowan膮 procedur臋.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 46
USUNI CIE PROCEDURY - DROP PROCEDURE
DROP PROCEDURE nazwa_proc
Uwagi dotycz膮ce usuwania procedur:
" Mo偶liwa do przeprowadzenia przez u偶ytkownika, kt贸ry utworzy艂 procedur臋 lub
wymagane jest posiadanie prawa systemowego DROP ANY PROCEDURE.
" Usuwanie dotyczy procedur, b臋d膮cych obiektami BD.
DEFINIOWANIE TRIGGER脫W - CREATE TRIGGER
CREATE [OR REPLACE] TRIGGER nazwa_triggera BEFORE | AFTER
DELETE | [OR] INSERT | [OR] UPDATE [OF COLUMN kol1, kol2,...]
ON tabela [FOR EACH ROW [WHEN warunek]] polecenia_PL_SQL
Uwagi dotycz膮ce tworzenia trigger贸w:
" Wymagane jest posiadanie prawa systemowego CREATE TRIGGER we w艂asnym
schemacie lub CREATE ANY TRIGGER.
" Triggery mog膮 by膰 skojarzone z operacjami usuwania (DELETE), wstawiania
(INSERT), modyfikowania rekord贸w (UPDATE) lub poszczeg贸lnych kolumn
(UPDATE OF) we wskazanej tabeli (ON tabela).
" Klauzule BEFORE i AFTER wskazuj膮 moment uruchomienia triggera.
" Wykonanie instrukcji triggera wymaga posiadania praw do tych operacji.
" Mo偶liwa jest redefinicja trigger贸w (OR REPLACE) bez konieczno艣ci ich usuwania.
" Trigger skojarzony z operacj膮 jest uruchamiany tylko jeden raz; mo偶liwe jest tak偶e
wykonanie instrukcji triggera dla ka偶dego rekordu (FOR EACH ROW), kt贸ry
dodatkowo spe艂nia podany warunek (WHEN warunek).
" Aktywacja triggera nast臋puje w momencie jego definicji, mo偶liwa jest deaktywacja
triggera w instrukcji ALTER TRIGGER lub ALTER TABLE.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 47
TYPY TRIGGER脫W
FOR EACH ROW
BEFORE Trigger uruchamiany raz przed Trigger uruchamiany przed wyst膮pieniem
wyst膮pieniem zdarzenia zdarzenia dla ka偶dego rekordu
AFTER Trigger uruchamiany raz po Trigger uruchamiany po wyst膮pieniem
wyst膮pieniu zdarzenia zdarzenia dla ka偶dego rekordu
Przyk艂ady:
1/ CREATE TRIGGER mod_egzaminy
BEFORE DELETE OR UPDATE OR INSERT ON egzaminy
BEGIN
IF (TO_CHAR(SYSDATE, 'DY') = 'SAT' OR (TO_CHAR(SYSDATE, 'DY') = 'SUN' THEN
raise_application_error(-20501, 'Wprowadzanie danych w weekend zabronione');
END IF;
IF (TO_CHAR(SYSDATE, 'HH24') < 8 OR (TO_CHAR(SYSDATE, 'HH24') >= 16 THEN
raise_application_error(-20502, 'Wprowadzanie danych po godzinach pracy zabronione');
END IF;
END;
2/ CREATE TRIGGER mod_egzaminy
BEFORE INSERT ON egzaminy FOR EACH ROW
BEGIN
UPDATE egzaminy SET :new.Nr_egz = s_egzaminy.NEXTVAL;
END;
3/ CREATE TRIGGER kontr_przedmioty
BEFORE UPDATE ON przedmioty FOR EACH ROW
DECLARE
max_mod NUMBER(1);
min_mod NUMBER(1);
BEGIN
SELECT MAX(Id_przedmiot) MIN(Id_przedmiot) INTO max_mod min_mod
FROM przedmioty;
IF (:new.Id_przedmiot > max_mod OR :new.Id_przedmiot < min_mod) THEN
raise_application_error(-20502, 'B艂臋dny numer modulu ');
END IF ;
END;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 48
MODYFIKACJA TRIGGER脫W - ALTER TRIGGER
ALTER TRIGGER nazwa_triggera ENABLE | DISABLE
Uwagi dotycz膮ce modyfikacji trigger贸w:
" Dotyczy wy艂膮cznie aktywacji i deaktywacji trigger贸w.
" Mo偶liwa do przeprowadzenia przez u偶ytkownika, kt贸ry utworzy艂 trigger lub
wymagane jest posiadanie prawa systemowego ALTER ANY TRIGGER.
" Mo偶liwa tak偶e przy pomocy polecenia ALTER TABLE.
Przyk艂ad:
ALTER TRIGGER mod_egzaminy DISABLE;
USUNI CIE TRIGGER脫W - DROP TRIGGER
DROP TRIGGER nazwa_triggera
Uwagi dotycz膮ce usuwania trigger贸w:
" Mo偶liwa do przeprowadzenia przez u偶ytkownika, kt贸ry utworzy艂 trigger lub
wymagane jest posiadanie prawa systemowego DROP ANY TRIGGER.
" Usuwanie dotyczy trigger贸w, b臋d膮cych obiektami BD.
DEFINIOWANIE PAKIET脫W
Definicja pakietu obejmuje:
" specyfikacj臋 pakietu - deklaracja wszystkich obiekt贸w wchodz膮cych w sk艂ad pakietu
" definicj臋 wszystkich obiekt贸w wymienionych w specyfikacji pakietu
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 49
SPECYFIKACJA PAKIET脫W- CREATE PACKAGE
CREATE [OR REPLACE] PACKAGE nazwa_pakietu
IS | AS polecenia_PL_SQL
Uwagi dotycz膮ce definiowania specyfikacji pakietu:
" Wymagane jest posiadanie prawa systemowego CREATE PROCEDURE we
w艂asnym schemacie lub CREATE ANY PROCEDURE.
" Specyfikacja pakietu przechowywana jest w BD jako samodzielny obiekt.
" Deklaracje obiekt贸w s膮 zbiorem instrukcji j臋zyka PL/SQL.
" Mo偶liwa jest redefinicja specyfikacji bez konieczno艣ci jej usuwania, ponownego
definiowania i przyznawania praw do obiekt贸w poprzez u偶ycie opcji OR REPLACE.
" Obiekty zadeklarowane w specyfikacji s膮 typu public; mo偶na do nich odwo艂ywa膰 si臋
na zewn膮trz pakietu lub z obiekt贸w wchodz膮cych w sk艂ad pakietu.
Przyk艂ad:
CREATE PACKAGE osrodki_akt AS
PROCEDURE usun_osrodek(nrosr NUMBER);
FUNCTION dod_osrodek RETURN NUMBER;
PROCEDURE mod_osrodek(nrosr NUMBER);
END osrodek_akt;
DEFINIOWANIE OBIEKT脫W PAKIETU- CREATE PACKAGE BODY
CREATE [OR REPLACE] PACKAGE BODY nazwa_pakietu IS | AS
polecenia_PL_SQL
Uwagi dotycz膮ce definiowania obiekt贸w pakietu:
" Wymagane jest posiadanie prawa systemowego CREATE PROCEDURE we w艂asnym
schemacie lub CREATE ANY PROCEDURE.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 50
" Definicja obiekt贸w pakietu przechowywana jest w BD jako samodzielny obiekt.
" Nale偶y zdefiniowa膰 wszystkie obiekty zadeklarowane w specyfikacji pakietu.
" Definicje obiekt贸w pakietu s膮 zbiorem instrukcji j臋zyka PL/SQL.
" Redefinicja obiekt贸w pakietu bez konieczno艣ci usuwania, ponownego definiowania
i przyznawania praw wymaga u偶ycia opcji OR REPLACE.
" Obiekty zadeklarowane wewn膮trz pakietu s膮 typu private; mo偶na do nich odwo艂ywa膰
si臋 tylko z innych obiekt贸w pakietu.
Przyk艂ad:
CREATE PACKAGE BODY osrodki_akt AS
PROCEDURE usun_osr (nrosr NUMBER) IS
BEGIN
DELETE FROM osrodki WHERE osrodki.Id_osrodek = nrosr;
END;
FUNCTION dod_osr (nazwa VARCHAR2) RETURN NUMBER IS
num NUMBER(5);
BEGIN
SELECT s_osrodki.NEXTVAL INTO num FROM sys.dual;
INSERT INTO osrodki VALUES (num, nazwa, NULL, NULL, NULL, NULL);
END;
PROCEDURE mod_osr (nrosr NUMBER, Kod VARCHAR2, Miasto VARCHAR2) IS
BEGIN
UPDATE osrodki SET (Kod = mod_osr.kod, Miasto = mod_osr.Miasto)
WHERE osrodek.Id_osrodek = mod_osr.nrosr;
END;
END osrodek_akt;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 51
REKOMPILACJA PAKIETU- ALTER PACKAGE
ALTER PACKAGE nazwa_pakietu COMPILE [PACKAGE | BODY]
Uwagi dotycz膮ce rekompilacji pakietu:
" Wymagane jest posiadanie prawa systemowego ALTER ANY PROCEDURE lub
prawa w艂asno艣ci pakietu.
" Rekompilacja pakietu mo偶e dotyczy膰 jego specyfikacji i definicji jego obiekt贸w
(COMPILE PACKAGE) lub tylko definicji obiekt贸w (COMPILE BODY).
" Rekompilacja dotyczy wszystkich obiekt贸w r贸wnocze艣nie; nie jest mo偶liwe u偶ycie
instrukcji ALTER FUNCTION lub ALTER PROCEDURE do rekompilacji
pojedycznych funkcji lub procedur wchodz膮cych w sk艂ad pakietu.
" Rekompilacja specyfikacji pakietu (COMPILE PACKAGE) odbywa si臋 niezale偶nie
od rekompilacji definicji obiekt贸w.
" Rekompilacja definicji obiekt贸w pakietu poprzedzona jest kompilacj膮 innych
obiekt贸w, od kt贸rych zale偶膮 obiekty pakietu.
" B艂膮d rekompilacji specyfikacji pakietu uniewa偶nia odwo艂ania do obiekt贸w pakietu
wyst臋puj膮ce w innych obiektach zewn臋trznych.
ZALETY STOSOWANIA PAKIET脫W
" przejrzysta organizacja struktury kodu zr贸d艂owego aplikacji
" efektywne nadawanie praw do zbioru obiekt贸w
" prosta modyfikacja definicji obiekt贸w pakietu
" du偶a szybko艣膰 wykonywania funkcji i procedur, b臋d膮cych obiektami pakietu
" mo偶liwo艣膰 definiowania zmiennych globalnych, wykorzystywanych w obiektach
pakietu
" mo偶liwo艣膰 definiowania r贸偶nych obiekt贸w o tych samych nazwach
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 52
FUNKCJE JZYKA SQL
Rodzaje funkcji:
1. Funkcje skalarne lub operuj膮ce na jednym rekordzie danych:
" numeryczne
" znakowe
" daty
" konwersji
2. Funkcje agreguj膮ce lub operuj膮ce na zbiorach rekord贸w danych:
" grupowe
" inne
FUNKCJE NUMERYCZNE
Funkcje, kt贸rych argumentami i rezultatem s膮 warto艣ci numeryczne.
Nazwa funkcji Opis
ABS(n) warto艣膰 bezwzgl臋dna z n
CEIL(n) najmniejsza liczba ca艂kowita wi臋ksza lub r贸wna n
COS(n) cosinus z n (w radianach)
COSH(n) cosinus hiperboliczny z n
EXP(n) e do pot臋gi n (e = 2.71828183)
FLOOR(n) najwi臋ksza liczba ca艂kowita mniejsza lub r贸wna n
LN(n) logarytm naturalny z n
LOG(m, n) logarytm przy podstawie m z n
MOD(m,n) reszta z dzielenia m przez n
POWER(m,n) m do pot臋gi n
ROUND(n,[m]) warto艣膰 n zaokr膮glona do m miejsc dziesi臋tnych
SIN(n) sinus z n (w radianach)
SINH(n) sinus hiperboliczny z n
SQRT(n) pierwiastek kwadratowy
TAN(n) tangens z n (w radianach)
TANH(n) tangens hiperboliczny
TRUNC(n,[m]) warto艣膰 n zawieraj膮ca m miejsc dziesi臋tnych (bez zaokr膮glania)
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 53
FUNKCJE ZNAKOWE
Funkcje, kt贸rych argumentami s膮 ci膮gi znak贸w, a rezultatem s膮 warto艣ci numeryczne lub ci膮gi
znak贸w.
Nazwa funkcji Opis
Funkcje o rezultatach znakowych
CHR(n) Wy艣wietla znak o podanym kodzie n
CONCAT(cz1, cz2) Konkatenacja ci膮g贸w znak贸w cz1 i cz2
INITCAP(cz) Zamiana pierwszych litery wyraz贸w ci膮gu na
du偶e litery
LOWER(cz) Zamiana znak贸w w ci膮gu na ma艂e litery
LPAD(cz1, n [, cz2]) Uzupe艂nienie z lewej strony ci膮gu znak贸w cz1
o ci膮g cz2 do ca艂kowitej d艂ugo艣ci n znak贸w
LTRIM(cz1 [, cz2]) Usuni臋cie z lewej strony w ci膮gu znak贸w cz1
znak贸w okre艣lonych przez cz2
REPLACE(cz1, cz2, [, cz3]) Zast膮pienie w ci膮gu znak贸w cz1, ci膮gu cz2
poprzez ci膮g znak贸w cz3
RPAD(cz1, n [,cz2]) Uzupe艂nienie z prawej strony ci膮gu znak贸w cz1
o ci膮g cz2 do ca艂kowitej d艂ugo艣ci n znak贸w
RTRIM(cz1 [,cz2]) Usuni臋cie z prawej strony w ci膮gu znak贸w cz1
znak贸w okre艣lonych przez cz2
SUBSTR(cz, m [,n]) Wyci臋cie z ci膮gu znak贸w cz podci膮gu znak贸w
zaczynaj膮cego si臋 od pozycji m; n - liczba znak贸w
wycinanych
UPPER(cz) Zamiana znak贸w w ci膮gu na du偶e litery
Funkcje o rezultatach numerycznych
ASCII(znak) Podaje kod ASCII wskazanego znaku
INSTR(cz1, cz2 [,n [,m]]) Przeszukanie ci膮gu znak贸w cz1, pocz膮wszy od
pozycji n w celu znalezienia m-tego wyst膮pienia
ci膮gu cz2
LENGTH(cz) D艂ugo艣膰 ci膮gu znak贸w
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 54
FUNKCJE DATY
Funkcje, kt贸rych argumenty i rezultaty s膮 typu daty.
Nazwa funkcji Opis
Funkcje o rezultatach typu daty
ADD_MONTHS(d, n) Dodanie do miesi膮ca daty d liczby miesi臋cy okre艣lonej
przez n
LAST_DAY(d) Wyznaczenie ostatniego dnia miesi膮ca okre艣lonego
w dacie d
NEW_TIME(d, s1, s2) Wyznaczenie czasu i daty w strefie czasowej s2
odpowiadaj膮cego czasowi i dacie d w strefie s1
NEXT_DAY(d, cz) Wyznaczenie najbli偶szej daty dnia, kt贸rego nazw臋
podano w ci膮gu znak贸w cz w stosunku do daty d
ROUND(d [,fmt]) Wyznaczenie zaokr膮glenia daty d w oparciu o format
okre艣lony przez fmt np. do pocz膮tku roku
SYSDATE Wyznaczenie daty systemowej
TRUNC(d [, fmt]) Wyci臋cie z daty d informacji wed艂ug formatu fmt.
Funkcje o rezultatach numerycznych
MONTHS_BETWEEN(d1, d2) R贸偶nica mi臋dzy datami d1 i d2 wyra偶ona w miesi膮cach
FUNKCJE KONWERSJI
Funkcje dokonuj膮ce konwersji danych mi臋dzy r贸偶nymi typami danych.
Nazwa funkcji Opis
CHARTOROWID(ci膮g) Konwersja typu VARCHAR2 lub CHAR na typ ROWID
TO_CHAR(d [,fmt]) Konwersja daty d do postaci ci膮gu znak贸w wg formatu fmt
TO_CHAR(n [,fmt]) Konwersja danych numerycznych n do postaci ci膮gu znak贸w
wg podanego formatu fmt
TO_DATE(ci膮g [,fmt]) Konwersja ci膮gu znak贸w ci膮g do postaci daty wg formatu fmt
TO_NUMBER(ci膮g [,fmt]) Konwersja ci膮gu znak贸w ci膮g do postaci danej numerycznej
wg formatu fmt
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 55
FUNKCJE GRUPOWE
Funkcje umo偶liwiaj膮ce wykonanie operacji matematycznych na grupach rekord贸w.
Nazwa funkcji Opis
AVG(DISTINCT|ALL n) Wyznaczenie warto艣ci 艣redniej z n;
n - wyra偶enie lub nazwa kolumny
COUNT(*| [DISTINCT|ALL] wyr) Zliczenie ilo艣ci rekord贸w; wyr - nazwa kolumny lub
wyra偶enie
MAX([DISTINCT|ALL] wyr) Warto艣膰 maksymalna z wyra偶enia wyr
MIN([DISTINCT|ALL] wyr) Warto艣膰 minimalna z wyra偶enia wyr
STDDEV([DISTINCT|ALL] x) Standardowe odchylenie od x
SUM([DISTINCT|ALL] n) Suma warto艣ci n
VARIANCE([DISTINCT|ALL] x) Wariancja z x
INNE FUNKCJE
Funkcje umo偶liwiaj膮ce wykonanie operacji matematycznych na grupach rekord贸w.
Nazwa funkcji Opis
NVL(wyr1, wyr2) Funkcja zwraca warto艣膰 wyra偶enia wyr1, je艣li jest ono
r贸偶ne od NULL; je艣li wyr1 = NULL to funkcja zwraca
warto艣膰 wyr2
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 56
ZARZDZANIE TRANSAKCJAMI
Transakcja to zbi贸r akcji, wykonuj膮cych si臋 wszystkie albo 偶adna.
" transakcja rozpoczyna si臋 wraz z pierwsz膮 instrukcj膮 DML lub DDL modyfikuj膮c膮
BD
" transakcja ko艅czy si臋 w spos贸b jawny w momencie zatwierdzenia zmian (COMMIT),
ich wycofania (ROLLBACK) lub od艂膮czenia si臋 od BD
" transakcja zatwierdzana jest w spos贸b niejawny przed i po zako艅czeniu ka偶dej
instrukcji DDL
" przebieg transakcji mo偶na oznacza膰 tzw. punktami zachowania (SAVEPOINT)
ZATWIERDZANIE TRANSAKCJI - COMMIT
COMMIT [WORK]
Przyk艂ad:
INSERT INTO przedmiotyVALUES (2, 'U偶ytkowanie komputer贸w');
COMMIT;
Uwagi dotycz膮ce zatwierdzania transakcji:
" Wydanie polecenia nie wymaga posiadania 偶adnych praw.
" Zatwierdzenie transakcji powoduje usuni臋cie wszystkich punkt贸w zachowania
i zwalnia za艂o偶one przez transakcj臋 blokady oraz utrwala w BD zmiany dokonane
przez u偶ytkownika.
" Zaleca si臋 u偶ywanie polecenia COMMIT do jawnego ko艅czenia transakcji.
" Ka偶da niezatwierdzona transakcja w sytuacji awaryjnej zostanie wycofana przez
SZBD.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 57
WYCOFANIE TRANSAKCJI - ROLLBACK
ROLLBACK [WORK] [TO punkt_zachowania]
Przyk艂ad:
BEGIN
SAVEPOINT ins_mod_1;
INSERT INTO modul VALUES (2, 'U偶ytkowanie komputer贸w');
SAVEPOINT ins_mod_2;
INSERT INTO modul VALUES (4, 'Edytory tekstu');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
ROLLBACK TO ins_mod_1;
END;
Uwagi dotycz膮ce wycofania transakcji:
" Wydanie polecenia nie wymaga posiadania 偶adnych praw.
" Polecenie s艂u偶y do wycofania akcji przeprowadzonych w ramach transakcji.
" U偶ycie ROLLBACK powoduje zako艅czenie transakcji, anulowanie wszystkich zmian
przeprowadzonych przez transakcj臋, usuni臋cie wszystkich punkt贸w zachowania
i zwolnienie blokad za艂o偶onych przez transakcj臋.
" U偶ycie ROLLBACK TO punkt_zachowania powoduje anulowanie tylko tych zmian,
kt贸re zosta艂y wprowadzone po punkcie zachowania, usuni臋cie wszystkich punkt贸w
zachowania zdefiniowanych po danym punkcie oraz zwolnienie blokad, kt贸re
wyst膮pi艂y do danego punktu zachowania; blokady za艂o偶one po danym punkcie
zostan膮 zwolnione po zako艅czeniu lub wycofaniu transakcji.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 58
PUNKTY ZACHOWANIA TRANSAKCJI - SAVEPOINT TO
SAVEPOINT punkt_zachowania
Uwagi dotycz膮ce definiowania punkt贸w zachowania transakcji:
" Wydanie polecenia nie wymaga posiadania 偶adnych praw.
" Punkty zachowania pozwalaj膮 elastycznie sterowa膰 przebiegiem transakcji.
" Nazwa punktu zachowania mo偶e powtarza膰 si臋 wewn膮trz transakcji; dotychczasowy
punkt o tej samej nazwie zostaje przesuni臋ty do nowego miejsca.
" Maksymalna liczba punkt贸w zachowania dla u偶ytkownika - 255; domy艣lnie 5.
DEFINIOWANIE TRANSAKCJI - SET TRANSACTION
SET TRANSACTION [READ ONLY] | [READ WRITE]
Przyk艂ad:
SET TRANSACTION READ ONLY;
SELECT * FROM egzaminatorzy;
COMMIT;
Uwagi dotycz膮ce definiowania transakcji:
" Jawny spos贸b rozpocz臋cia transakcji (instrukcja musi wyst膮pi膰 jako pierwsza).
" Pozwala uzyska膰 sp贸jne dane z wielu tabel.
" Transakcja READ ONLY umo偶liwia wykonywanie tylko polecenia SELECT i SET
ROLE a jest zatwierdzana poleceniem COMMIT lub poleceniem DDL.
" Dla transakcji READ ONLY u偶ytkownik dysponuje obrazem BD jaki istnia艂
momencie wykonania polecenia SET TRANSACTION.
" Klauzula READ WRITE umo偶liwia wykonywanie innych operacji DML.
" Inni u偶ytkownicy BD mog膮 wykonywa膰 swoje transakcje wybierania lub
modyfikowania bez 偶adnych przeszk贸d.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 59
ADMINISTRACJA BAZ DANYCH
W SZRBD ORACLE
" Zarz膮dzanie prawami dost臋pu do obiekt贸w BD
" Zarz膮dzanie prawami systemowymi
" Zarz膮dzanie rolami
SA OWNIK BAZY DANYCH
S艂ownik Bazy danych zawiera informacje o:
" obiektach, kt贸rych w艂a艣cicielem jest dany u偶ytkownik (perspektywa USER_xxx)
" obiektach, do kt贸rych u偶ytkownik posiada prawa dost臋pu i kt贸rych jest w艂a艣cicielem
(perspektywa ALL_xxx)
" wszystkich tabelach i perspektywach dost臋pnych dla u偶ytkownika (perspektywa
DICTIONARY)
" kolumnach definiuj膮cych obiekty dost臋pne dla u偶ytkownika (perspektywa
DICT_COLUMNS)
" definicjach wszystkich wi臋z贸w integralno艣ci dost臋pnych dla u偶ytkownika
(perspektywa CONSTRAINT_DEFS)
" opisach kolumn wchodz膮cych w sk艂ad definicji wi臋z贸w integralno艣ci i dost臋pnych dla
u偶ytkownika (perspektywa CONSTRAINT_COLUMNS)
LISTA PERSPEKTYW TYPU ALL_XXX
PERSPEKTYWA OPIS
Lista tabel, perspektyw, sekwencji dost臋pnych dla
ALL_CATALOG
u偶ytkownika
ALL_CONSTRAINTS
Wi臋zy integralno艣ci tabel dost臋pnych dla u偶ytkownika
ALL_INDEXES
Lista indeks贸w tabel dost臋pnych dla u偶ytkownika
ALL_OBJECTS Lista obiekt贸w dost臋pnych dla u偶ytkownika
ALL_SEQUENCES
Opis sekwencji dost臋pnych dla u偶ytkownika
ALL_TABLES
Opisy tabel dost臋pnych dla u偶ytkownika
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 60
LISTA PERSPEKTYW TYPU USER_XXX
PERSPEKTYWA OPIS
USER_CATALOG Lista tabel, perspektyw, sekwencji, kt贸rych w艂a艣cicielem jest
u偶ytkownik
USER_INDEXES Opisy indeks贸w utworzonych przez u偶ytkownika
USER_OBJECTS Lista obiekt贸w utworzonych przez u偶ytkownika
USER_SEQUENCES Opisy sekwencji zdefiniowanych przez u偶ytkownika
USER_TAB_COLUMNS Definicje kolumn tabel i perspektyw utworzonych przez
u偶ytkownika
USER_TABLES Opisy tabel, kt贸rych w艂a艣cicielem jest u偶ytkownik
RODZAJE PRAW DOST PU DO BAZY DANYCH
" Prawa do wykonywania okre艣lonych operacji w ramach danego zadania
" Prawa do poszczeg贸lnych obiekt贸w i operacji wykonywanych na tych obiektach
" Prawa systemowe (nadrz臋dne w stosunku do praw do obiekt贸w)
SPOSOBY NADAWANIA PRAW
" nadawanie pojedynczych praw do obiekt贸w i operacji wykonywanych na nich
" nadawanie zbioru praw do obiekt贸w lub operacji
Rola - zbi贸r praw i/lub innych r贸l, umo偶liwiaj膮cych elastyczne administrowanie
systemem uprzywilejowa艅 w bazie danych
Rola mo偶e sk艂ada膰 si臋 z:
" pojedynczych praw do obiekt贸w i operacji
" pojedynczych praw systemowych
" innych r贸l
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 61
TWORZENIE ROLI - CREATE ROLE
CREATE ROLE nazwa_roli [ NOT IDENTIFIED | IDENTIFIED BY password ]
Przyk艂ady:
1/ CREATE ROLE r_dane_we_ecdl ;
2/ CREATE ROLE r_egzamin_we IDENTIFIED BY ECDL ;
Uwagi dotycz膮ce tworzenia r贸l:
" Zdefiniowanie roli wymaga posiadania prawa systemowego CREATE ROLE.
" Rola utworzona poleceniem CREATE ROLE nie zawiera 偶adnych praw; konieczne
jest u偶ycie polecenia GRANT w celu zdefiniowania praw wchodz膮cych w sk艂ad roli.
" U偶ytkownik definiuj膮cy role staje si臋 automatycznie jej administratorem i otrzymuje
od SZRBD rol臋 ADMIN OPTION.
" W艂asno艣膰 ADMIN OPTION pozwala wykonywa膰 nast臋puj膮ce operacje: przydziela膰
dan膮 rol臋 innym u偶ytkownikom lub rolom, odwo艂ywa膰 uprzednio przyznan膮 rol臋,
zmienia膰 w艂asno艣ci roli, usuwa膰 rol臋.
" Na etapie tworzenia roli mo偶na okre艣li膰, czy u偶ytkownik, kt贸ry dokona aktywacji roli
powinien by膰 identyfikowany przez has艂o (IDENTIFIED BY) czy te偶 nie (NOT
IDENTIFIED - domy艣le ustawienie).
" Istniej膮 predefiniowane role: CONNECT, RESOURCE, DBA,
EXP_FULL_DATABASE, IMP_FULL_DATABASE.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 62
MODYFIKACJA ROLI - ALTER ROLE
ALTER ROLE nazwa_roli NOT IDENTIFIED | IDENTIFIED BY password
Przyk艂ad:
ALTER ROLE r_dane_we_ecdl IDENTIFIED BY ecdl ;
Uwagi dotycz膮ce modyfikacji r贸l:
" Wymaga posiadania prawa systemowego ALTER ANY ROLE lub uprawnienia
ADMIN OPTION.
" Dotyczy zmiany sposobu autoryzacji u偶ytkownika w momecie aktywacji roli.
AKTYWACJA ROLI - SET ROLE
SET ROLE rola IDENTIFIED BY password | ALL [EXCEPT rola1,...] | NONE
Przyk艂ad:
SET ROLE r_dane_we_ecdl IDENTIFIED BY ecdl ;
Uwagi dotycz膮ce aktywacji r贸l:
" Aktywacja roli wymaga uprzedniego przyznania roli od jej w艂a艣ciciela.
" Przyznane role mog膮 by膰 aktywowane lub deaktywowane (NONE) w bie偶膮cej sesji
pracy przy pomocy polecenia SET ROLE.
" Aktywacja mo偶e dotyczy膰 wszystkich r贸l tj. przyznanych bezpo艣rednio przez ich
w艂a艣cicieli lub r贸l wchodz膮cych w sk艂ad innych r贸l.
" Role wymienione w opcji EXCEPT musz膮 by膰 rolami przyznanymi bezpo艣rednio
przez ich w艂a艣cicieli.
" Aktywacja r贸l przy pomocy opcji ALL nie jest mo偶liwa, je艣li dla r贸l zdefiniowano
has艂a.
" Istniej膮 ograniczenia na maksymaln膮 liczb臋 aktywnych r贸l w bie偶膮cej sesji pracy.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 63
USUWANIE ROLI - DROP ROLE
DROP ROLE nazwa_roli
Przyk艂ad:
DROP ROLE r_dane_we_ecdl ;
Uwagi dotycz膮ce usuwania r贸l:
" Polecenie usuwa z bazy danych definicj臋 roli.
" Rola mo偶e zosta膰 usuni臋ta przez jej w艂a艣ciciela lub wymagane jest posiadanie prawa
systemowego DROP ANY ROLE.
" Wykonanie polecenia DROP ROLE powoduje usuni臋cie danej roli z definicji innych
r贸l oraz anulowanie praw u偶ytkownik贸w do tej roli.
NADAWANIE PRAW DO OBIEKT脫W BAZY DANYCH - GRANT
GRANT ALL [PRIVILEGES] |
[ALTER], [INDEX], [REFERENCES], [SELECT], [INSERT], [EXECUTE],
[DELETE], [UPDATE] [(lista_kolumn)]
ON tabela| obiekt TO lista_u偶ytkownik贸w | lista_r贸l | PUBLIC
[WITH GRANT OPTION]
Przyk艂ady:
1/ GRANT ALL ON egzaminy TO marekm WITH GRANT OPTION;
2/ GRANT SELECT, UPDATE, INSERT ON egzaminy TO elam;
3/ GRANT INSERT ON r_dane_we_ecdl TO agas;
4/ GRANT ALTER, INDEX, REFERENCES ON egzaminatorzy TO piotrm;
5/ GRANT UPDATE (Nazwa_p, Opis), REFERENCES (Id_przedmiot) ON przedmiotyTO alak;
6/ GRANT SELECT, UPDATE ON osrodki TO PUBLIC;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 64
Uwagi dotycz膮ce nadawania praw u偶ytkownikom i rolom do obiekt贸w:
" Polecenie dotyczy nadawania i przekazywania (WITH GRANT OPTION) praw do
nast臋puj膮cych obiekt贸w: tabel, perspektyw, sekwencji, procedur, funkcji, pakiet贸w
oraz definiowania praw wchodz膮cych w sk艂ad r贸l.
" Polecenie nadaje wszystkim (PUBLIC) lub wybranym u偶ytkownikom
(lista_u偶ytkownik贸w) i rolom (lista_r贸l) prawa do poszczeg贸lnych obiekt贸w oraz do
wykonywania operacji na tych obiektach.
" U偶ytkownik mo偶e nadawa膰 prawa tylko do obiekt贸w, kt贸rych jest w艂a艣cicielem lub
je艣li otrzyma艂 prawo z opcj膮 WITH GRANT OPTION.
" Prawa mog膮 dotyczy膰 pojedynczych kolumn (lista_kolumn) lub ca艂ych tabel
i perspektyw i zwi膮zane s膮 z wykonywaniem operacji typu INSERT, UPDATE lub
opcj膮 REFERENCES.
" U偶ytkownik mo偶e korzysta膰 z nadanego prawa lub roli natychmiast po ich
przyznaniu.
LISTA PRAW DO OBIEKT脫W
PRAWO TABELE PERSPEKTYWY SEKWENCJE PROCEDURY,
FUNKCJE
+ +
ALTER
+ +
DELETE
+
EXECUTE
+
INDEX
+ +
INSERT
+
REFERENCES
+ + +
SELECT
+ +
UPDATE
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 65
NADAWANIE PRAW SYSTEMOWYCH - GRANT
GRANT prawo_sys | rola_sys TO lista_u偶ytkownik贸w | lista_r贸l | PUBLIC
[WITH ADMIN OPTION]
Przyk艂ady:
1/ GRANT CREATE TABLE, CREATE VIEW TO alak ;
2/ GRANT r_dane_we_ecdl TO r_egzamin_we ;
3/ GRANT r_dane_we_ecdl TO agas WITH ADMIN OPTION ;
Uwagi dotycz膮ce nadawania praw systemowych i definiowania r贸l:
" Polecenie dotyczy nadawania i przekazywania (WITH ADMIN OPTION) praw
systemowych i praw do r贸l u偶ytkownikom oraz definiowania r贸l za pomoc膮 innych
r贸l.
" Wymagane jest posiadanie odpowiedniego prawa z opcj膮 WITH ADMIN OPTION
lub prawa GRANT ANY PRIVILEGE.
" Przydzielanie roli mo偶liwe jest przez jej w艂a艣ciciela b膮dz konieczne jest posiadanie
prawa do roli z opcj膮 WITH ADMIN OPTION lub prawa GRANT ANY ROLE.
" Nie jest mo偶liwe wprowadzenie cyklicznych praw dla r贸l.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 66
LISTA WYBRANYCH PRAW SYSTEMOWYCH
PRAWO OPIS
Modyfikacja indeks贸w w dowolnym schemacie
ALTER ANY INDEX
Modyfikacja r贸l w BD
ALTER ANY ROLE
Modyfikacja sekwencji w BD
ALTER ANY SEQUENCE
Modyfikacja tabel lub perspektyw
ALTER ANY TABLE
Definiowanie komentarzy tabeli, perspektywy lub kolumny
COMMENT ANY TABLE
w dowolnym schemacie
Tworzenie indeks贸w dla dowolnej tabeli w dowolnym
CREATE ANY INDEX
schemacie
Tworzenie sekwencji w dowolnym schemacie
CREATE ANY SEQUENCE
Tworzenie tabel w dowolnym schemacie
CREATE ANY TABLE
Tworzenie perspektywyw dowolnym schemacie
CREATE ANY VIEW
Tworzenie r贸l
CREATE ROLE
Tworzenie sekwencji we w艂asnym schemacie
CREATE SEQUENCE
Tworzenie tabel we w艂asnym schemacie
CREATE TABLE
Tworzenie perspektyw we w艂asnym schemacie
CREATE VIEW
Usuwanie rekord贸w w tabeli lub perspektywie w dowolnym
DELETE ANY TABLE
schemacie
Usuwanie indeks贸w w dowolnym schemacie
DROP ANY INDEX
Usuwanie r贸l
DROP ANY ROLE
Usuwanie sekwencji w dowolnym schemacie
DROP ANY SEQUENCE
Usuwanie tabel w dowolnym schemacie
DROP ANY TABLE
Usuwanie perspektyw w dowolnym schemacie
DROP ANY VIEW
Prawo wykonywania procedur, funkcji zdefiniowanych w BD
EXECUTE ANY
i pakietach oraz odwo艂ywania si臋 do obiekt贸w typu public
PROCEDURE
w pakietach
Nadawanie dowolnych praw systemowych
GRANT ANY PRIVILEGE
Nadawanie dowolnej roli z BD
GRANT ANY ROLE
Wstawianie rekord贸w do tabel i perspektyw w dowolnym
INSERT ANY TABLE
schemacie
Odwo艂ywanie si臋 do sekwencji w dowolnym schemacie
SELECT ANY SEQUENCE
Odwo艂ywanie si臋 do tabel i perspektyw w dowolnym
SELECT ANY TABLE
schemacie
Wykorzystywanie nieograniczonego obszaru pami臋ci BD
UNLIMITED TABLESPACE
Modyfikacja rekord贸w w tabelach i perspektywach
UPDATE ANY TABLE
w dowolnym schemacie
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 67
LISTA R脫L SYSTEMOWYCH
ROLA PRAWA I ROLE
CONNECT ALTER SESSION, CREATE CLUSTER, CREATE DATABASE
LINK, CREATE SEQUENCE, CREATE SESSION, CREATE
SYNONYM, CREATE TABLE, CREATE VIEW
RESOURCE CREATE CLUSTER, CREATE PROCEDURE, CREATE
SEQUENCE, CREATE TABLE, CREATE TRIGGER
DBA wszystkie prawa systemowe z opcj膮 WITH ADMIN OPTION,
role EXP_FULL_DATABASE i IMP_FULL_DATABASE
EXP_FULL_DATABASE SELECT ANY TABLE, BACKUP ANY TABLE
EXP_IMP_DATABASE BECOME USER
ANULOWANIE PRAW DO OBIEKT脫W BAZY DANYCH - REVOKE
REVOKE ALL [PRIVILEGES] |
[ALTER], [INDEX], [REFERENCES], [SELECT], [INSERT], [EXECUTE],
[DELETE], [UPDATE] [(lista_kolumn)] ON tabela
FROM lista_u偶ytkownik贸w | lista_r贸l | PUBLIC [CASCADE CONSTRAINTS]
Przyk艂ady:
1/ REVOKE ALL ON egzaminy FROM marekm;
2/ REVOKE UPDATE, INSERT ON egzaminy FROM elam;
3/ REVOKE INSERT ON r_dane_we_ecdl FROM agas;
4/ REVOKE ALTER, INDEX ON egzaminatorzy FROM piotrm CASCADE CONSTRAINTS;
5/ REVOKE UPDATE ON przedmioty FROM alak;
6/ REVOKE UPDATE ON osrodki FROM PUBLIC;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 68
Uwagi dotycz膮ce anulowania praw do obiekt贸w nadanych u偶ytkownikom i rolom:
" Polecenie s艂u偶y do anulowania praw nadanych uprzednio poleceniem GRANT przez
danego u偶ytkownika.
" Anulowanie praw natychmiast uniemo偶liwia wykonywanie dalszych operacji,
kt贸rych prawa te dotyczy艂y.
" Klauzula PUBLIC mo偶e by膰 u偶yta tylko do anulowania praw tym u偶ytkownikom,
kt贸rym prawa te nadano przy pomocy tej samej klauzuli.
" Klauzula CASCADE CONSTRAINTS usuwa prawa, pozwalaj膮ce odwo艂ywa膰 si臋 do
kolumn innych tabel (opcja REFERENCES w instrukcji GRANT) jednocze艣nie
usuwaj膮c istniej膮ce wi臋zy integralno艣ci oparte na tych kolumnach.
" Anulowanie praw, kt贸re zosta艂y przekazane innym u偶ytkownikom lub przypisane
rolom powoduje ich anulowanie dla wszystkich u偶ytkownik贸w lub usuni臋cie
z definicji wszystkich r贸l.
" Anulowanie praw do danego obiektu, pochodz膮cych od wielu u偶ytkownik贸w wymaga
odwo艂ania tych praw przez ka偶dego z nich.
ANULOWANIE PRAW SYSTEMOWYCH - REVOKE
REVOKE prawo_sys | rola_sys FROM lista_u偶ytkownik贸w | lista_r贸l | PUBLIC
Przyk艂ady:
1/ REVOKE CREATE VIEW FROM alak;
2/ REVOKE r_dane_we_ecdl FROM r_egzamin_we;
3/ REVOKE r_dane_we_ecdl FROM agas;
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 69
Uwagi dotycz膮ce anulowania praw systemowych i r贸l:
" Polecenie umo偶liwia anulowanie przyznanych innym u偶ytkownikom praw
systemowych i r贸l oraz anulowanie r贸l u偶ytych w definicjach innych r贸l.
" Wymagane jest posiadanie odpowiedniego prawa z opcj膮 WITH ADMIN OPTION
lub w przypadku r贸l prawa systemowego GRANT ANY ROLE.
" Anulowanie praw systemowych natychmiast uniemo偶liwia wykonywanie dalszych
operacji, kt贸rych prawa te dotyczy艂y.
" Klauzula PUBLIC mo偶e by膰 u偶yta tylko do anulowania praw tym u偶ytkownikom,
kt贸rym prawa te nadano przy pomocy tej samej klauzuli.
" U偶ytkownik korzystaj膮cy z roli, kt贸ra zosta艂a mu odebrana w czasie sesji pracy, mo偶e
kontynuowa膰 prac臋 do chwili zako艅czenia sesji.
㏄iotr Muryjas, Instytut Informatyki, Politechnika Lubelska 70
Wyszukiwarka
Podobne podstrony:
zarzadzanie jakoscia wyklady Notatek pl
Wyklad 7 Nieparametryczne metody statystyczne PL [tryb zgodno艣ci]
SQL10G pl sql
notatek pl wyklad 3 model krazenia odpadow wyklad
04 PL wyklad
notatek pl zarzadzanie jakoscia dr janusz niezgoda wyklady
wyklad pl sql7
WYK艁AD PL
Oracle?tabaseg Programowanie w jezyku PL SQL or10ps
Wyklad 7 Jezyk SQL funkcje grupowe tworzenie tabel
notatek pl chemia budowlana wyklady
17 Procedury sk艂adowane w j臋zyku PL SQL (Oracle)
Przestrzenie zakrzywione(Feynmana wyklad 44 z tomu drugiego)(osiolek pl)
notatek pl wyklad 5 planowanie przestrzenne wyklad
02 PL wyklad
562 pl wyklady z dnia lutego 11
wi臋cej podobnych podstron