cz 3 Języki zapytań do baz danych

background image

1

SYSTEMY BAZ DANYCH

cd języka zapytań SQL

Opracowanie : Dr hab. Bożena Śmiałkowska

background image

2

Logiczny (boolowski)

BOOLEN

z wartościami TRUE,

FALSE oraz UNKNOWN (TRUE>FALSE)

Znakowy

CHARACTER [VARYING] [długość

] – można

skrócić do CHAR - Jeśli za łańcuch stałej długości
podstawimy mniejszą liczbę znaków, niż wskazuje jego
długość, to zostanie on uzupełniony na końcu spacjami
aż do osiągnięcia wymaganej długości.

VARCHAR

- w przypadku łańcucha zmiennej długości

zapamiętane zostaną jedynie wpisane znaki (dane będą
zajmować mniej pamięci).

Bitowy

BIT, BIT VARYING

lub

BIT [VARYING] [DŁUGOŚĆ]

Typy danych ISO SQL

background image

3

Dokładny liczbowy

NUMERIC [rozmiar[,dokładność]],
DECIMAL [rozmiar[,dokładność]],
INTEGER,
SMALLINT

gdzie INTEGER możemy skrócić do INT, a DECIMAL do
DEC

Przybliżony liczbowy

FLOAT[dokładność],
REAL,
DOUBLE PRECISION

gdzie zapis m10c , gdzie m-mantysa (l.rzeczywista), c-cecha
(l.całkowit.) - dokładność określa rozmiar mantysy

Typy danych ISO SQL

background image

4

Daty i czasu

DATE, TIME, TIMESTAMP

DATE jest stosowany do dat i zawiera pola

YEAR, MONTH, DAY

TIME jest stosowany do czasu i zawiera pola

HOUR, MINUTE, SECOUND

TIMESTAMP jest stosowany do czasu z

uwzględnieniem daty i godziny

Typy danych ISO SQL

background image

5

Waga typu atrybutu w procesie
wstawiania i aktualizowania bazy danych

Typ danych uniemożliwia wprowadzenie do

atrybutu tabeli bazy danych takiej wartości,
która jest niezgodna z typem atrybutu
określonym w CREATE TABLE – zapewnia to
automatyczną kontrolę wartości wstawianych
do bazy danych (INSERT) i aktualizowanych
(UPDATE)

Są również inne mechanizmy ochrony bazy
danych przed niewłaściwym wprowadzaniem i
aktualizowaniem danych – tymi mechanizmami są

więzy integralności

background image

6

Wprowadzanie

więzów

integralności bazy

danych w SQL

background image

7

Rodzaje więzów integralności

Dane wymagane

Więzy dziedzinowe

Więzy referencyjne

Więzy globalne (asercje)

Więzy specjalne (trigerry)

background image

8

Dane wymagane

Umieszczenie w poleceniu CREATE i ALTER

TABLE przy kolumnie klauzuli

NOT NULL

oznacza konieczność podania wartości dla
atrybutów, dla których podano klauzulę NOT
NULL

Np..

CREATE TABLE Pracownik
(…

ZAWOD char(30) NOT NULL

,…);

background image

9

Definiowanie więzów dziedzinowych

Są następujące sposoby:

Polecenie tworzenia dziedziny wartości
atrybutu (-ów)

(CREATE DOMAIN)

Klauzula

CHECK

użyta w CREATE DOMAIN i

CREATE TABLE

background image

10

Więzy integralności - dziedzinowe

Klauzula

CHECK (warunek_selekcji)

, używa się

do ograniczenia dopuszczalnych wartości atrybutu
tabeli

np..

SEX CHAR NOT NULL

CHECK

(SEX IN (‘M’, ‘K’))

background image

11

Definiowanie dziedziny wartości

Postać klauzuli

CREATE DOMAIN

NazwaDziedziny [AS]

typ_danych

[

DEFAULT

wartość_domyslna]

CHECK

(warunek_selekcji)

background image

12

PŁEĆ

CHAR NOT NULL

CHECK

(PŁEĆ IN (‘M’,

‘K’))

CREATE DOMAIN

LICZBA_OCZEK

AS

SMALLINT DEFAULT 1

CHECK

(VALUE IN

(1,2,3,4,5,6));

CREATE DOMAIN

TYP_DEPT

AS

SMALLINT

CHECK

(VALUE IN (SELECT DEPTNO FROM

DEPT));

Przykłady dziedzinowych więzów
integralności

background image

13

Przykłady definiowania dziedziny

CREATE DOMAIN

KodPocztowy

AS

VARCHAR(5);

CREATE DOMAIN

Adres

VARCHAR(55);

CREATE DOMAIN

TypNieruchomosci

AS

CHAR(1) CHECK (VALUE

IN(‘B’,’C’,’M’,’F’,’S’));

CREATE DOMAIN

L_Pokoj

AS SMALLINT

CHECK(VALUE BETWEEN 1 AND 15);

background image

14

Przykłady definiowania dziedziny –
cd..

CREATE DOMAIN

NumeryWlascicieli

AS

VARCHAR(5) CHECK (VALUE IN

(SELECT wlasciciele FROM

WlascicielPrywatny));

CREATE DOMAIN

NumeryPracownikow

AS

VARCHAR(5) CHECK (VALUES IN

(SELECT

pracownikNr FROM Persony));

background image

15

cd… przykładu

CREATE TABLE

NIERUCHOMOSCI

(

NrNieruchomosci VARCHAR(5) NOT NULL UNIQUE,

Wlasciciel

NumeryWlascicieli

NOT NULL,

Pracownik Nr

NumeryPracownikow

NOT NULL,

Kodadres

KodPocztowy

,

Adres_miejsce

Adres

NOT NULL,

Typ

TypNieruchomosci

NOT NULL DEFAULT ‘M’,

Ilosc_pokoi

L_Pokoj

NOT NULL DEFAULT 4,

PRIMARY KEY Wlasciciel);

background image

16

Więzy integralności - dziedzinowe

Dziedzinę można usunąć za pomocą

DROP DOMAIN NazwaDziedziny

[RESTRICT|CASCADE]

background image

17

Integralność encji – więzy referencyjne

Klauzula

PRIMARY KEY

(atryb_n {, atryb_n})

dla klucza głównego

Klauzula

UNIQUE

(atryb_n {, atryb_n}) dla

kluczy alternatywnych

background image

18

Integralność referencyjna

Klauzula FOREIGN KEY

Cztery tryby postępowania w przypadku
kasowania (modyfikowania) rekordów:

RESTRICT i NO ACTION

CASCADE

SET NULL

SET DEFAULT

FOREIGN KEY

(DEPTNO)

REFERENCES

DEPT

ON DELETE SET NULL

Np.

background image

19

Opcje restrykcyjne więzów
referencyjnych

restrykcyjne (

RESTRICT, NO ACTION

) –

usunięcie wiersza nadrzędnego nie jest
możliwe, jeśli istnieją wiersze podrzędne
(logicznie z nim powiązane),

background image

20

Opcje więzów referencyjnych – cd..

z wstawianiem wartości pustych (

SET NULL

)

– usunięcie wiersza nadrzędnego powoduje
automatyczne wstawienie wartości pustych w
miejsce kluczy obcych wierszy podrzędnych,

background image

21

Opcje więzów referencyjnych – cd..

kaskadowe (

CASCADE

) – usunięcie wiersza

nadrzędnego powoduje automatyczne
usunięcie wierszy podrzędnych (logicznie z
nim powiązanych).

background image

22

Przykład

CREATE TABLE

DOSTAWY

(IdDost char(5),

IdTow char(10),

FOREIGN KEY IdDost REFERENCES

DOSTAWCA

ON DELETE CASCADE);

Określono tu zależność referencyjną wg której każda niezerowa
wartość

DOSTAWY.IdDost

musi wystąpić w

DOSTAWCA.IdDost

.

Określa to również, że jeśli zostanie wprowadzony wiersz w tabeli

DOSTAWY

to taka operacja zostanie odrzucona jeśli w tabeli

DOSTAWCA

wartość IdDost nowo wprowadzana nie istnieje.

background image

23

Opcje więzów referencyjnych – cd..

z wstawianiem wartości pustych (

SET

DEFAULT

) – usunięcie wiersza nadrzędnego

powoduje automatyczne wstawienie wartości
podanej po DEFAULT w miejsce kluczy
obcych wierszy podrzędnych,

background image

24

Przykład

ZESPOLY (

nr_zespolu

, nazwa, nr_projektu)

PRACOWNICY(

Nr_prac

, nazwisko, nr_zespolu)

WYPLATY(

Nr_prac, nr_tematu

, kwota)

TEMATY(

nr_tematu

, nazwa, nr_projektu)

SET NULL

CASCADE

RESTRICT

background image

25

Ograniczenia na usuwanie i
modyfikację wierszy

ON DELETE

{ NO ACTION | RESTRICT |

CASCADE |

SET NULL | SET DEFAULT }

ON UPDATE

{ NO ACTION | RESTRICT |

CASCADE |

SET NULL | SET DEFAULT }

background image

26

Inny przykład więzów

dziedzinowe

referencyjne

background image

27

Więzy globalne (ogólne) - Po co nam
takie więzy?

Wszystkie dotychczas omówione więzy dotyczyły
pojedynczej krotki (więzy wartości atrybutów),
ewentualnie prostych związków między krotkami z
różnych relacji (więzy integralności)

czasami chcielibyśmy napisać warunek, który
dotyczy całej relacji (tabeli) lub kilku relacji (tabel).

Przykładem takich więzów są asercje.

Asercje nie są związane z definicją tabeli (CREATE
TABLE)

background image

28

Więzy integralności ogólnej – składnia
asercji

CREATE ASSERTION

NazwaAsercji

CHECK

(warunek_selekcji)

CREATE ASSERTION

PracownikNadzorującyNieZaDużo

CHECK

(NOT EXISTS (SELECT pracownikNr FROM
Nieruchomości GROUP BY pracownikNr
HAVING COUNT(*)>100))

Np.

background image

29

Przykład więzów globalnych

W bazie są następujące relacje:

Dyrektor

(nazwisko:varchar(10),adres:varchar(10),

cert:varchar(10),cenaSieci:int)

Studio

(nazwa:varchar(10),adres:varchar(10),

prezes:varchar (10) references Dyrektor(cert))

Chcielibyśmy, aby szefem (prezesem) studia była

osoba, której sieć ma wartość co najmniej 10 mln $

background image

30

Definicja asercji z przykładu

CREATE ASSERTION

BogatyPrezes

CHECK

(NOT EXISTS

(SELECT *

FROM Studio,Dyrektor

WHERE prezes=cert AND
cenaSieci<10000000

));

Asercja opisująca warunek bycia
bogatym prezesem

background image

31

Gdybyśmy chcieli zdefiniować bogatych
prezesów w tabeli Studio używając CHECK?

CREATE TABLE Studio (

nazwa CHAR(30) PRIMARY KEY,

adres VARCHAR(255),

prezC INT REFERENCES Dyrektor(cert),

CHECK (prezes NOT IN

(SELECT cert FROM Dyrektor

WHERE cenaSieci<10000000)

));

?

background image

32

Gdyby zdefiniowano bogatych prezesów
w tabeli Studio używając CHECK to:

nie uzyskamy tego samego efektu co przy
pomocy asercji.

Dzieje się tak ponieważ warunek, który jest
opisany w więzie CHECK, będzie
sprawdzany przy wstawianiu i modyfikacji
krotki tylko z relacji Studio.

Przy zmianach w relacji Dyrektor więzy
CHECK w relacji Studio nie będą
sprawdzane.

background image

33

Wnioski z przykładu „Bogaci prezesi”

Jeśli uczynimy kogoś prezesem studia a potem
będziemy chcieli obniżyć wartość jego sieci to

asercja na to nie pozwoli

natomiast

więz krotkowy

tak

, ponieważ on jest sprawdzany przy modyfikacji

krotki z relacji Studio a nie krotki z relacji Prezes.

DLACZEGO: ponieważ więzy krotkowe powinny
dotyczyć krotek z danej relacji a w tej relacji nic się
nie zmieniło. Ten sposób traktowania więzów
krotkowych wynika głównie z wymogów
wydajnościowych! Wyobraźmy sobie, jaką pracę
musiałaby wykonać baza, gdyby musiała zapewnić
wiele więzów krotkowych podobnych temu.

background image

34

Inny przykład

Film

(tytuł:varchar(10),rok:date,długość:int,

czyKolor:boolean,nazwaStudia:varchar(10),

producentC:varchar(10));

chcielibyśmy, aby długość wszystkich filmów w
danym studiu miała co najmniej 10000 minut.

Mamy relację:

background image

35

CREATE ASSERTION SumDlugość

CHECK (10000 <= ALL

(SELECT SUM(długość) FROM Film

GROUP BY nazwaStudia));

W tym przypadku istnieje silna pokusa, aby zamiast
tworzyć asercję dodać linijki 2-4 jako więz CHECK do
relacji Film.
Wydaje się,że również zadziałałoby.
Jednak również w tym wypadku zauważmy, co
mogłoby się zdarzyć przy usuwaniu filmów!!

background image

36

Porównanie więzów (krotkowych)
CHECK i asercji

Przy dowolnej modyfikacji relacji
(wstawianie, modyfikacja lub
usuwanie dowolnej krotki) której
dotyczy ta asercja

Asercje

Przy wstawianiu lub zmianie
wartości w krotce (NIE przy
usuwaniu krotki z relacji) tylko z
tej relacji

Krotkowe CHECK

Warunki uruchomienia

więzów

Typ więzów

background image

37

Inne potrzeby integralności

Czasami chcielibyśmy reagować w bardziej aktywny
sposób na sytuacje, gdy dochodzi do naruszenia
jakiegoś warunku lub niezmiennika niż tylko nie
dopuszczając do tych modyfikacji bazy danych, która
ten warunek narusza (być może dla pewnych sytuacji
umiemy temu zaradzić).

Czasami chcielibyśmy decydować, kiedy warunek ma
być sprawdzany (choćby ze względu na wydajność),
a w przypadku np. asercji to system o tym decyduje.

Poza tym asercje są „drogie”. Dlatego chcielibyśmy

mieć coś „tańszego” od asercji, co pozwala nam na
nakładanie pewnych więzów na bazę.

WYZWALACZE

background image

38

Wyzwalacze

Wyzwalacze są testowane tylko przy zajściu
określonego zdarzenia (dołączanie,
usuwanie, modyfikacja krotki) określonego
przez programistę (projektanta bazy) (w
przypadku asercji i więzów krotkowych
CHECK decyduje o tym SZBD)

Testują warunek w chwili zajścia zdarzenia (a
nie uprzedzają go)

Jeśli warunek zostanie spełniony to
przetwarzana jest akcja związania z
wyzwalaczem

background image

39

Składnia wyzwalaczy

CREATE TRIGGER <

nazwa_wyzwalacza

>

{BEFORE|INSTEAD OF |AFTER}

[OF <

nazwa_kolumny

>] ON <

nazwa_tabeli

>

REFERENCING

{

OLD|OLD_TABLE

} AS

nazwa_zmiennej1

{

NEW|NEW_TABLE

} AS

nazwa_zmiennej2

WHEN (<

warunek

>)

<

lista_poleceń_do_wykonania

>

[FOR EACH ROW]

background image

40

Cechy wyzwalaczy

Akcja może być wykonana przed (BEFORE),
po (AFTER) lub zamiast (INSTEAD OF)
zdarzenia

W akcji dostępne są wartości sprzed (OLD,
OLD_TABLE) zajścia zdarzenia jak i nowe
(NEW,NEW_TABLE) wartości

Można określać czy akcja ma być
wykonywana dla każdej modyfikowanej krotki
(FOR EACH ROW) czy tylko raz dla
wszystkich krotek zmodyfikowanych w
pojedynczej operacji

background image

41

Wyzwalacze (trigger) - przykład

INSERT w „Pracownicy” oznacza, że
akcja reguły zostanie odpalona
bezpośrednio po wykonaniu pojedynczej
operacji wstawienia krotki (fraza

AFTER)

. Fraza "

for each row

" określa, że

akcja realizowana jest na pojedynczej
krotce. Prefiks

:

New

poprzedzający

nazwę atrybutu „IdZesp” w ciele akcji
reguły jest odwołaniem do wartości tego
atrybutu we wstawianej krotce.

background image

42

Przykład wyzwalacza

CREATE TRIGGER CenaSieciWyzw

AFTER UPDATE OF cenaSieci ON Dyrektor

REFERENCING

OLD AS Stara

NEW AS Nowa

WHEN (Stara.cenaSieci > Nowa.cenaSieci)

UPDATE Dyrektor SET cenaSieci= Stara.cenaSieci

WHERE cert = Nowa.cert

FOR EACH ROW

Uniemożliwienie obniżenie ceny sieci

background image

43

Inny przykład wyzwalacza

CREATE TRIGGER WyzwalaczSrCenySieci
INSTEAD OF UPDATE OF cena sieci ON Dyrektor
REFERENCING

OLD_TABLE AS Stara
NEW_TABLE AS Nowa

WHEN (500000 <= (SELECT AVG(cenaSieci) FROM

((Dyrektor EXCEPT Stare) UNION Nowe))

DELETE FROM Dyrektor WHERE

(nazwisko,adres,cert,cenaSieci) IN Stare;

INSERT INTO Dyrektor (SELECT * FROM Nowe);

Zabronienie spadku średniej ceny sieci poniżej 500000

background image

44

BEZPIECZEŃSTWO

DOSTĘPU DO

BAZY DANYCH

background image

45

Składowe SQL

background image

46

Ochrona bezpieczeństwa bazy danych
w SQL

Bezpieczeństwo bazy danych jest bardzo istotną
kwestią w każdej firmie czy korporacji.

Zapewnienie dostępu do systemu bazodanowego

tylko dla osób korzystających z systemu
bazodanowego nie gwarantuje jego bezpieczeństwa.

Takie sytuacje mają miejsce, kiedy dana grupa
użytkowników, lub użytkownik posiadają nadmiarowy
dostęp do bazy danych

Aby zapobiec tego typu sytuacjom, wykorzystuje się

warstwę DCL języka SQL (dodatkowa warstwa obok
DDL, DML, DQL).

background image

47

Role w bazie danych

Istotną kwestią bezpieczeństwa w każdym SBD są role

Warstwa DDL obejmuje jedynie tworzenie, zmianę i
usuwanie ról

Aby zarządzać rolami należy się odwołać do części
DCL języka SQL, w której to określono jak przydzielać i
poszerzać role.

Są 3 typy ról w SBD:

Systemowe

Bazy danych

Aplikacji

background image

48

Tworzenie roli

CREATE ROLE

role_name

[ AUTHORIZATION

owner_name

]

W miejscu

role_name

należy podać unikalną w

przestrzeni BD nazwę roli.

Administrator tworząc role może ją „przekazać” dla

innego użytkownika jako jego własną.

Do tego służy opcja AUTHORIZATION, gdzie jako

owner_name

podaje się nazwę użytkownika, który ma

być jego właścicielem.

Pominięcie opcji AUTHORIZATION, powoduje

automatycznie nadanie praw własności do roli osobie
ją tworzącej.

background image

49

Nadawanie praw innym użytkownikom

GRANT [

lista_praw

|ALL PEIVILIGES]

ON

NazwaObiektu

TO [

lista_identyfikatorów_użytkowników

|PUBLIC]

[WITH GRANT OPTION]

GRANT DELETE, UPDATE (

premia,pensja

)

ON

pracownik

TO

kierownik

;

Wszystkie prawa

jednocześnie

Możliwość przekazywania

praw innym użytkownikom

Wszystkim

użytkownikom

background image

50

Odbieranie praw dostępu użytkownikom

REVOKE

[GRANT OPTION FOR]

[

lista praw

|ALL PRIVILIGES]

ON

NazwaObiektu

FROM [

lista_identyfikatorów

|

PUBLIC|RESTRICT|CASCADE]

W wyniku odbierania praw mogłyby powstać tzw. obiekty porzucone dla
których właściciel przestał mieć prawa, które były konieczne do
stworzenia obiektu. Polecenie REVOKE nie jest wykonywane w takim
przypadku, chyba że zawiera opcję CASCADE powodującą wydanie
polecenia DROP dla wszystkich porzuconych perspektyw, dziedzin,
więzów i asercji.
Polecenie REVOKE wydane przez użytkownika służy do odebrania praw
nadanych tylko przez niego.

background image

51

Indeksy (poza ISO SQL)

Indeks jest pomocniczą (redundantną) strukturą danych

przechowywaną w bazie danych dla potrzeb optymalizacji
dostępu do danych.

Administrator bazy danych zarządza pulą indeksów,

generując nowe indeksy, o ile rozpozna ich potrzebę, lub
je usuwając, jeżeli pewne indeksy są nieprzydatne.

Tak jak indeksy na końcu książki, służące do szybkiego

wyszukiwania stron, indeksy w bazach danych służą do
szybkiego wyszukiwania obiektów.

Zaletą indeksu jest jego stosunkowo mały rozmiar (w

porównaniu do całości bazy danych) oraz
jednoaspektowość wyszukiwania, co umożliwia ich bardzo
efektywną organizację.

background image

52

Indeksy (poza ISO SQL) cd..

Indeks należy rozumieć jako dwu-kolumnową tablicę,

gdzie pierwsza kolumna zawiera wartości kluczowe, zaś
druga – wartości nie-kluczowe, najczęściej referencje do
obiektów.

Wartości kluczowe są unikalne i służą jako wejście dla

procedury wyszukiwania w indeksie.

Wynikiem wyszukiwania wg danej wartości kluczowej są

wartości niekluczowe w tym samym wierszu tablicy.

Wartości kluczowe są zapamiętane w określonych

atrybutach obiektów bazy danych (dla indeksów gęstych)
lub są reprezentantami przedziałów wartości (dla
indeksów zakresowych).

Istnieją bardziej złożone indeksy odbiegające od tego

schematu.

background image

53

Baza danych ... ...i indeksy

i

1

Prac

i

2

Nazwisko ”Nowak”

i

3

Zar 2500

i

4

PracujeW

i

22

Dział

i

23

Nazwa ”Sprzedaż”

i

24

Lokacja ”Radom”

i

25

Zatrudnia

i

26

Zatrudnia

i

17

Dział

i

18

Nazwa ”Produkcja”

i

19

Lokacja ”Kielce”

i

21

Zatrudnia

i

20

Lokacja ”Kraków”

i

9

Prac

i

10

Nazwisko ”Barski”

i

11

Zar 900

i

16

PracujeW

i

13

Miasto ”Radom”

i

14

Ulica ”Wolska”

i

15

NrDomu 12

i

12

Adres

i

5

Prac

i

6

Nazwisko ”Kowalski”

i

7

Zar 2000

i

8

PracujeW

Indeks dla obiektów Prac
wg atrybutu Nazwisko

Wartość
kluczowa
Barski
Kowalski
Nowak

Wartość
nie-kluczowa
i

9

i

5

i

1

Indeks dla obiektów Dział
wg atrybutu Lokacja

Wartość
kluczowa
Kielce
Kraków
Radom

Wartość
nie-kluczowa
i

17

i

17

i

22

background image

54

Inne przykłady indeksów

Indeks tzw. gęsty dla
obiektów Prac wg atrybutu
Stan

Wartość
kluczowa
analityk
kierownik
operator
programista
radca

Wartość
nie-kluczowa
i

15

, i

17

, i

43

i

72

, i

43

i

18

, i

22

, i

25

, i

57

i

22

, i

43

, i

59

, i

48

i

7

Indeks zakresowy dla
obiektów Prac wg
atrybutu Zar

Wartość
kluczowa
500
1000
1500
2500
4500
5000
7500

Wartość
nie-kluczowa
i

15

i

72

, i

43

i

18

, i

22

, i

25

i

25

, i

45

, i

59

, i

48

i

26

, i

55

i

29

, i

66

i

7

background image

55

Zakładanie indeksu

CREATE [UNIUE] INDEX

NazwaIndeksu

ON

NazwaTabeli

(nazwaKolumny[

Asc|Desc

][,…])

CREATE UNIQUE INDEX

IndNPr

ON

Per

(

PracNr

);

CREATE INDEX

IndeksWynajmow

ON

Nieruchomości

(

Miasto

,

Czynsz

);

SZBD będzie kontrolował unikalność wartości

kolumn

background image

56

System zarządzania bazą danych

(DBMS)

Baza danych

DBMS

serwer

Formularze

internetowe

Aplikacje

Interfejs

SQL

Funkcje DBMS:

• Tworzenie nowej bazy

• Przechowywanie danych

• Obsługa zapytań (ang. query)

• Zapewnienie wielodostępności

• Zapewnienie integralności danych

• Ochrona danych (np. archiwizacja)

Komendy SQL

background image

57

Dostęp do bazy

danych z

poziomu języka

programowania

background image

58

Język PL/SQL

to rozszerzenie SQL o elementy
programowania

proceduralnego i obiektowego
umożliwiające wykorzystanie:

zmiennych, stałych

Struktur kontrolnych (instrukcji warunkowych),
etykiet i skoków, pętli, kursorów

Wyjątków i mechanizmu obsługi błędów

background image

59

Struktura blokowa programu w
PL/SQL

Program składa się z jednostek zwanych blokami.

Każdy blok odpowiada problemowi
(podproblemowi)

Bloki mogą być dowolnie zagnieżdżone

Każdy blok składa się z trzech części:

deklaracji (o)

rozkazów (w)

obsługi błędów (o)

bloki mogą być zagnieżdżane w części rozkazów
lub/i cz
ęści obsługi błędów

background image

60

Struktura blokowa programu w
PL/SQL

deklaracje

rozkazy

obsługa błędów

background image

61

Zmienne w PL/SQL

Zmienne proste (np. typu numerycznego,
znakowego, daty)

Zmienne podtypu (np. zdefiniowanego przez
użytkownika)

Zmienne złożone (np. rekordy, tablice, kolekcje,
obiekty)

DECLARE nazwa_zmiennej typ(długość)

[DEFAULT wartość domyślna]

[NOT NULL];

background image

62

Zmienne rekordowe

Przed zadeklarowaniem zmiennej rekordowej
trzeba zdefiniować typ rekordowy

TYPE Osoba IS RECORD (

nazwisko VARCHAR(60),

imie VARCHAR(30),

pesel…

);

background image

63

Zmienne tablicowe

Istnieją trzy rodzaj tablic:

Tablice indeksowane (index-by tables):
nieograniczony rozmiar, automatycznie rozszerzane,
nie mogą być typem atrybutu w bazie danych, indeks
tablicy może być ujemny

Tablice zagnieżdżone (nested tables):
nieograniczony rozmiar, rozszerzane za pomocą
procedury EXTEND, mogą być typem atrybutu w
relacji, mogą być użyte w poleceniach DML, nie
zainicjalizowana tablica jest pusta, przechowywane
fizycznie w osobnej relacji (store table), indeks tablicy
musi być dodatni

background image

64

Zmienne tablicowe

Kolekcje o zmiennym rozmiarze (varrays):
ograniczony i rozszerzalny rozmiar, przechowywane
w zwartej postaci in-line, indeks kolekcji musi być
dodatni

TYPE PracTab is TABLE OF VARCHAR(100)
INDEX BY BINARY_INTEGER

TYPE TabRecOs is TABLE OF Osoba

TYPE Niedziele is TABLE OF DATE

background image

65

Atrybuty %TYPE, %ROWTYPE

% TYPE pozwala nam zadeklarować
zmienną która jest takiego typu jak inna
zmienna lub atrybut w bazie danych

Atrybut %ROWTYPE zawiera typ rekordowy
reprezentujący strukturę pojedynczej krotki z
danej relacji. Atrybuty w krotce i
odpowiadające im pola w rekordzie maja te
same nazwy i typy.

DECLARE

nazwisko OSOBA.NAZWISKO%TYPE

osobaRec OSOBA%ROWTYPE

background image

66

Nadawanie wartości zmiennym

Nadanie wartości poprzez przypisanie

Nadanie wartości przez wczytanie danych z bazy
danych do zmiennej poleceniem SELECT ... INTO ...

Nadanie wartości przez przekazanie zmiennej jako
parametru typu IN OUT lub OUT do procedury lub
funkcji

Nadanie wartości przez wczytanie danych z bazy
danych do zmiennej za pomocą klauzuli
RETURNING poleceń INSERT/UPDATE/DELETE

background image

67

STAŁE

Stałe deklarujemy z uyciem słowa
kluczowego CONSTANT. Stała musi zostac
zainicjalizowana podczas deklaracji. Po
utworzeniu stałej jakiekolwiek modyfikacje jej
wartości są niedozwolone.

DECLARE

conGodz CONSTANT NUMBER:=42;

conNazwa CONSTANT VARCHAR(20):=‘’baza_danych”

background image

68

Typy Danych

background image

69

Typy Danych

Typy danych dostępne w PL/SQL nie odpowiadają
dokładnie analogicznym typom dostępnym w SQL.

Typy BINARY_INTEGER i PLS_INTEGER: -2

31

, 2

31

.

Ich podtypami są typy: POSITIVE, POSITIVEN,
NATURAL, NATURALN i SIGNTYPE (-1, 0, 1).

Typ NUMBER: 10

-130

¸ 10

125

. Jego podtypami są typy:

DECIMAL, INTEGER, FLOAT, REAL, NUMERIC.

Typy CHAR, VARCHAR2, RAW, LONG: 32767
bajtów

Typ BOOLEAN: TRUE, FALSE, NULL

background image

70

Podtypy

Każdy typ danych definiuje zbiór poprawnych wartości i

zbiór operatorów, które mogą być zastosowane do
zmiennej danego typu. Podtyp definiuje ten sam zbiór
operatorów co jego typ nadrzędny, lecz zawęża zbiór
poprawnych wartości.

SUBTYPE nazwa IS typ bazowy [ (ograniczenie) ] [ NOT NULL ];

background image

71

Instrukcja Warunkowa

IF warunek THEN

sekwencja poleceń;

END IF;

IF warunek THEN

sekwencja

poleceń;
ELSE

sekwencja

poleceń;
END IF;

IF warunek1 THEN

sekwencja poleceń;

ELSEIF warunek2
THEN

sekwencja poleceń;

ELSE

sekwencja poleceń;

END IF;

background image

72

Instrukcja CASE

Instrukcja CASE może występować z selektorem

(selektorem może być dowolnie złożone wyrażenie,
ale najczęściej jest to jedna zmienna) lub z lista
wyrażeń (searched CASE)

CASE selektor

WHEN wartość1 THEN polecenie1;

ELSE polecenieN;

END CASE;

CASE selektor

WHEN wyrażenie1 THEN polecenie1;

ELSE polecenieN;

END CASE;

background image

73

Pętla LOOP

Prosta pętla wykonuje się w nieskończoność. Wyjście z

pętli jest możliwe tylko jako efekt wykonania
polecenia EXIT lub EXIT WHEN. W każdym
przebiegu pętli wykonuje się sekwencja poleceń. Po
ich wykonaniu kontrola powraca do początku pętli.

LOOP

sekwencja poleceń;
IF warunek THEN

EXIT;

END IF;

END LOOP;

LOOP

sekwencja poleceń;
EXIT WHEN warunek;

END LOOP;

background image

74

Pętla While

WHILE warunek LOOP

sekwencja poleceń;

END LOOP;

background image

75

Pętla FOR

Pętla FOR wykonuje się określona liczbę razy. Liczba iteracji
jest określona przez zakres podany miedzy słowami kluczowymi
FOR i LOOP. Zakres musi być typu numerycznego, w
przedziale –2

31

¸ 2

31

Słowo kluczowe REVERSE odwraca kierunek iteracji

Wewnątrz pętli nie wolno nadawać wartości zmiennej iterującej

Jeśli dolna granica jest wyższa ni górna granica to pętla nie
wykona się ani razu

Obie granice zakresu iteracji nie muszą być statyczne

Zmienna iterująca nie musi być wcześniej deklarowana ani
inicjalizowana

Do wcześniejszego wyjścia z pętli można użyć polecenia EXIT

background image

76

Pętla FOR

FOR licznik IN

[REVERSE] dl_gr.. gór_gr LOOP

sekwencja poleceń;

END LOOP;

background image

77

Polecenia sterujące GOTO i NULL

Polecenie GOTO bezwarunkowo przekazuje kontrolę
wykonywania programu do miejsca wskazywanego przez
etykietę związaną z poleceniem. Polecenie NULL nie wykonuje
żadnej akcji.

Etykieta musi poprzedzać polecenie wykonywalne

GOTO nie może przeskakiwać do warunkowych części poleceń
IF-THEN-ELSE, CASE, do polecenia LOOP i do bloku
podrzędnego

GOTO nie może wyskakiwać z podprogramu oraz procedury
obsługi błędu

GOTO etykieta;

<<etykieta>>

NULL

;

;

background image

78

Kursory

Każde zapytanie SQL umieszczone w programie PL/SQL może zwrócić

zero, jedna bądź wiele krotek. Aby efektywnie przetworzyć krotki
zwrócone przez zapytanie korzystamy z kursorów. Kursor jest obiektem
związanym z zapytaniem. Programista może:

Otworzyć kursor (zidentyfikować zbiór wynikowy)

Pobrać dana do kursora (odczytać kolejną krotkę z wyniku zapytania i
wpisać ja do kursora)

Zamknąć kursor (zwolnić obszar pamięci przydzielony kursorowi)

Kursor to nazwa obszaru roboczego, w którym mieści się wynik zapytania

(result set). Wewnątrz kursora wyróżniamy bieżacy wiersz (current
row). Kursor może być jawny (explicit) lub niejawny (implicit).

background image

79

Deklarowanie kursora

DECLARE CURSOR nazwa [(lista

parametrów)]

[RETURN typ zwracany] IS zapytanieSQL;

Parametr [IN] typ [{:=|DEFAULT} wartość]

Nazwa kursora nie jest zmienn

Nazwa kursora nie jest zmienn

ą

ą

, lecz identyfikatorem. Do

, lecz identyfikatorem. Do

kursora nie mo

kursora nie mo

ż

ż

na przypisa

na przypisa

ć

ć

warto

warto

ś

ś

ci. Parametry s

ci. Parametry s

ą

ą

widoczne

widoczne

tylko wewn

tylko wewn

ą

ą

trz kursora, nie mo

trz kursora, nie mo

ż

ż

na zwi

na zwi

ą

ą

za

za

ć

ć

z nimi

z nimi

ż

ż

adnych

adnych

ogranicze

ogranicze

ń

ń

background image

80

Otwieranie kursora

Otwarcie kursora powoduje wykonanie związanego z

nim zapytania i zidentyfikowanie zbioru wynikowego,
zawierającego krotki spełniające kryteria
wyszukiwania.

OPEN nazwa_kursora [(lista parametrów

aktualnych)]

background image

81

Pobieranie z kursora

Każde wykonanie polecenia FETCH powoduje
odczytanie bieżącego wiersza kursora i przesuniecie
znacznika kursora na kolejny wiersz.

Na liście zmiennych musi się znajdować taka sama
liczba zmiennych jak liczba atrybutów w kursorze.

Odpowiednie zmienne i atrybuty musza się zgadzać
co do typu.

FETCH nazwa_kursora INTO

lista_zmiennych | rekord

background image

82

Zamykanie kursora

Zamkniecie kursora powoduje, e kursor staje się

nieaktywny a zbiór wynikowy związany z kursorem
staje się niezdefiniowany. Zamknięty kursor można
powtórnie otworzyć, np. z innymi parametrami. Każde
odwołanie się do zamkniętego (lub jeszcze nie
otwartego) kursora powoduje błąd
INVALID_CURSOR.

CLOSE nazwa_kursora;

background image

83

Atrybuty kursora

%FOUND – wartością atrybutu jest TRUE jeśli ostatnia operacja
FETCH odczytała krotkę z kursora. W przeciwnym wypadku
(tzn. kiedy odczyt się nie udał) atrybut przyjmuje wartość
FALSE. Przed pierwszym odczytem atrybut ma wartość NULL

%NOTFOUND – wartością atrybutu jest FALSE jeśli ostatnia
operacja FETCH odczytała krotkę z kursora. W przeciwnym
wypadku (tzn. kiedy odczyt się nie udał) atrybut przyjmuje
wartość TRUE. Przed pierwszym odczytem atrybut ma wartość
NULL

%ROWCOUNT – wartością atrybutu jest liczba odczytanych z
kursora krotek. Przed pierwszym odczytem atrybut ma wartość
0

%ISOPEN – wartością atrybutu jest TRUE jeśli kursor jest
otwarty i FALSE jeśli kursor jest zamknięty.

background image

84

Obsługa wyjątków w PL/SQL

Błąd lub ostrzeżenie nazywamy w PL/SQL wyjątkiem
(ang. exception). Wyjątki mogą być systemowe
(dzielenie przez zero, brak wolnej pamięci, brak praw do
obiektu) lub definiowane przez użytkownika (za niski
budżet, za wysoka płaca, zbyt mała ilość towaru w
magazynie).

Wystąpienie błędu jest sygnalizowane przez wywołanie
wyjątku. Błędy systemowe sygnalizowane są
automatycznie, błędy definiowane przez użytkownika są
wywoływane ręcznie za pomocą polecenia RAISE.

Po wystąpieniu wyjątku kontrola przechodzi do
procedury obsługi wyjątku (ang. exception handler). Po
jej wykonaniu kontrola przechodzi do kolejnego bloku
nadrzędnego. Jeśli procedura obsługi danego błędu nie
zostanie znaleziona, to wykonywanie programu
zostanie przerwane.

background image

85

Kontrola błędów

BŁĄD

background image

86

Predefiniowane wyjątki systemowe

background image

87

Zmienne podstawienia

Zmienne definiowane przez użytkownika mogą być użyte w

miejsce nazw relacji, atrybutów lub jako wartości atrybutów.
Zmienna podstawienia nie może być pierwszym słowem
polecenia. Zmienne podstawienia są zawsze typu CHAR.
Polecenie DEFINE bez parametrów wyświetla listę wszystkich
zmiennych podstawienia.

DEFINE myTable = ‘’PRACOWNICY”

DEFINE myValue =‘’PROFESOR”

SELECT * FROM &myTable WHERE etat=&myValue

UNDEFINE myTabel

UNDEFINE myValue

background image

88

Zmienne wiązane

Zmienne wiązane to zmienne deklarowane w SQL*Plus lub innym

środowisku zewnętrznym, które są dostępne w programach
PL/SQL. Mogą służyć do przekazywania wartości z PL/SQL do
SQL i do optymalizacji zapytań. W PL/SQL zachowują się jak
zwykłe zmienne.

VARIABLE x NUMBER

BEGIN

SELECT COUNT (*) INTO:x FROM PRACOWNICY;

END;

PRINT x;

background image

89

Zmienne wiązane kursorowe

Zmienne wiązane kursorowe pozwalają na odczytanie w SQL*Plus

wyniku zapytania umieszczonego w bloku PL/SQL. Mogą być
stosowane zarówno w anonimowych blokach PL/SQL, jak i jako
parametr lub typ wynikowy procedury lub funkcji.

VARIABLE x REFCURSOR

BEGIN

OPEN:x FOR SELECT * FROM PRACOWNICY;

END;

PRINT x;

background image

90

Procedury

Procedury (wykonują określone akcje), funkcje (wykonują obliczenia i

zwracają wartości) i pakiety (zbierają w całość logicznie powiązane
procedury, funkcje, zmienne i kursory):

przechowywane w bazie danych w postaci skompilowanej i źródłowej
(źródło dostępne poprzez USER_SOURCE)

postać skompilowana zwiększenie szybkości działania

współdzielone przez wielu użytkowników

Zalety:

rozszerzalność

Modularność

łatwość pielęgnowania kodu

możliwość wielokrotnego użycia kodu

ukrycie szczegółów implementacji

background image

91

Definiowanie procedury

CREATE [OR REPLACE] PROCEDURE nazwa_procedury

[(argument,…)] IS
……………….

BEGIN

……………….

END [nazwa_procedury];

nazwa procedury musi by

nazwa procedury musi by

ć

ć

unikalna w ramach schematu (lub

unikalna w ramach schematu (lub

pakietu)

pakietu)

mi

mi

ę

ę

dzy s

dzy s

ł

ł

owami kluczowymi IS i BEGIN umieszczamy

owami kluczowymi IS i BEGIN umieszczamy

deklaracje

deklaracje

wszystkich zmiennych i kursor

wszystkich zmiennych i kursor

ó

ó

w lokalnych

w lokalnych

mi

mi

ę

ę

dzy s

dzy s

ł

ł

owami kluczowymi BEGIN i END umieszczamy kod

owami kluczowymi BEGIN i END umieszczamy kod

PL/SQL, kt

PL/SQL, kt

ó

ó

ry wykonuje dana procedura

ry wykonuje dana procedura

background image

92

Argumenty procedur i funkcji

nazwa [IN|OUT| IN OUT] typ [DEFAULT wartość]

w li

w li

ś

ś

cie argument

cie argument

ó

ó

w nie podajemy rozmiaru argumentu (tylko typ)

w nie podajemy rozmiaru argumentu (tylko typ)

argument formalny: u

argument formalny: u

ż

ż

ywany w deklaracji procedury i w cz

ywany w deklaracji procedury i w cz

ęś

ęś

ci

ci

wykonywalnej PL/SQL

wykonywalnej PL/SQL

argument aktualny: u

argument aktualny: u

ż

ż

ywany przy wywo

ywany przy wywo

ł

ł

ywaniu procedury

ywaniu procedury

background image

93

Definiowanie funkcji

CREATE [OR REPLACE] FUNCTION nazwa_funkcji [(argument,…)]

RETURN typ IS
……………….

BEGIN

……………….

END [nazwa_funkcji];

nazwa funkcji musi by

nazwa funkcji musi by

ć

ć

unikalna w ramach schematu (lub pakietu)

unikalna w ramach schematu (lub pakietu)

po s

po s

ł

ł

owie kluczowym RETURN umieszczamy typ zwracany przez funkcj

owie kluczowym RETURN umieszczamy typ zwracany przez funkcj

ę

ę

mi

mi

ę

ę

dzy s

dzy s

ł

ł

owami kluczowymi IS i BEGIN umieszczamy deklaracje

owami kluczowymi IS i BEGIN umieszczamy deklaracje

wszystkich zmiennych i kursor

wszystkich zmiennych i kursor

ó

ó

w lokalnych

w lokalnych

mi

mi

ę

ę

dzy s

dzy s

ł

ł

owami kluczowymi BEGIN i END umieszczamy kod PL/SQL,

owami kluczowymi BEGIN i END umieszczamy kod PL/SQL,

kt

kt

ó

ó

ry

ry

wykonuje dana funkcja

wykonuje dana funkcja

w kodzie PL/SQL musi si

w kodzie PL/SQL musi si

ę

ę

znale

znale

źć

źć

instrukcja RETURN

instrukcja RETURN

background image

94

Wywołanie procedur i funkcji

VARIABLE nr_zesp NUMBER
VARIABLE l_asyst NUMBER
BEGIN

:nr_zesp:=20
spr_asyst(:nr_zesp,:l_asyst);

END;
PRINT l_asyst;

PL/SQL

SQL

SELECT moja_fun(argument) FROM tabela;

UWAGA: wo

UWAGA: wo

ł

ł

anie funkcji z poziomu SQL jest mo

anie funkcji z poziomu SQL jest mo

ż

ż

liwe tylko wtedy

liwe tylko wtedy

gdy funkcja posiada odpowiedni poziom

gdy funkcja posiada odpowiedni poziom

czysto

czysto

ś

ś

ci

ci

background image

95

Czystość funkcji

Aby funkcja mogła być wywoływana z poziomu SQL, musi

ona posiadać odpowiedni poziom czystości

• funkcja wywoływana z instrukcji SELECT nie może

modyfikować żadnych wartości w bazie danych

• funkcja wywoływana z instrukcji INSERT, UPDATE,

DELETE nie może odczytywać i modyfikować żadnej
tabeli, której dotyczy instrukcja

• funkcja wywoływana z instrukcji SELECT, INSERT,

UPDATE, DELETE nie może zawierać instrukcji
sterujących sesją i transakcjami oraz instrukcji DDL

background image

96

Kompilowanie i usuwanie procedur
lub funkcji

ALTER PROCEDURE | FUNCTION nazwa

COMPILE;

DROP PROCEDURE | FUNCTION nazwa;

background image

97

Słownik bazy danych

USER_OBJECTS - informacja o obiektach w

schemacie użytkownika

SELECT object_name, object_type, status

FROM user_objects

WHERE object_type IN (‘PROCEDURE’,’FUNCTION’);

USER_SOURCE - kod źródłowy procedur i

funkcji użytkownika

SELECT text

FROM user_source

WHERE name=‘NAZWA PROCEDURY’

ORDER BY line;

background image

98

Funkcje tablicowe

Funkcje tablicowe dają w wyniku kolekcję krotek. Nazwy tych

funkcji mogą być wykorzystywane zamiast nazw tabel. Funkcje
tablicowe mogą również przyjmować kolekcję krotek jako
parametr. Funkcje mogą być zrównoleglone oraz potokowane,
co zwiększa efektywność przetwarzania poprzez:

wielowątkowe wykonanie funkcji

eliminację przechowywania wyników pośrednich

zmniejszenie czasu odpowiedzi na pierwsze wyniki

iteracyjne dostarczanie kolejnych krotek wyniku

W przypadku funkcji potokowanych do dostarczenia krotki do

wyniku służy komenda PIPE ROW (...)

background image

99

Przykład funkcji tablicowej

CREATE TYPE CharTyp AS TABLE OF VARCHAR2(20);

CREATE OR REPLACE FUNCTION FPracownicy(p_etat CHAR)
RETURN CharTyp PIPELINED AS
BEGIN

FOR x IN ( SELECT * FROM pracownicy WHERE etat=p_etat)
LOOP

PIPE ROW (x.nazwisko);

END LOOP;
RETURN;

END FPracownicy;

SELECT * FROM TABLE( FPracownicy('ASYSTENT') );
SELECT * FROM TABLE( FPracownicy('PROFESOR') );

background image

100

Procedury wyzwalane

Procedura wyzwalana (ang. trigger) to program w języku PL/SQL

(równie Java lub C) który reaguje na zdarzenia zachodzące w
bazie danych i wykonuje się po zajściu określonych warunków.

Typy procedur wyzwalanych:

BEFORE - uruchamiane przed wykonaniem polecenia INSERT,
UPDATE, DELETE

AFTER - uruchamiane po wykonaniu polecenia INSERT,
UPDATE, DELETE

INSTEAD OF – uruchamiane zamiast polecenia INSERT,
UPDATE, DELETE

systemowe – uruchamiane po zajściu określonego zdarzenia w
schemacie lub bazie danych

background image

101

Cele stosowania procedur
wyzwalanych

Zaawansowane śledzenie użytkowników

Ochrona przed nieprawidłowymi transakcjami

Wymuszanie więzów referencyjnych (albo więzów nie
wspieranych przez deklaratywne więzy integralnościowe albo
więzów między węzłami rozproszonej bazy danych)

Wymuszanie złożonych reguł biznesowych

Wymuszanie złożonych polityk bezpieczeństwa

Zapewnianie przezroczystego zapisu wydarzeń

Wypełnianie atrybutów wartościami domyślnymi

Modyfikacja złożonych perspektyw

Śledzenie wydarzeń systemowych

background image

102

Definiowanie procedury wyzwalanej

CREATE [OR REPLACE] TRIGGER nazwa
{ BEFORE | AFTER | INSTEAD OF }
{ INSERT | UPDATE | DELETE } ON { tabela |perspektywa }
[ WHEN warunek ]
[ FOR EACH ROW]
[ DECLARE /* deklaracje zmiennych i kursorów */ ]
BEGIN
/* ciało procedury wyzwalanej */
END;

INSTEAD OF: wyzwalacz mo

INSTEAD OF: wyzwalacz mo

ż

ż

e by

e by

ć

ć

zdefiniowany tylko na

zdefiniowany tylko na

perspektywie

perspektywie

WHEN: wyzwalacz wykonuje si

WHEN: wyzwalacz wykonuje si

ę

ę

tylko dla tych krotek, dla kt

tylko dla tych krotek, dla kt

ó

ó

rych

rych

jest spe

jest spe

ł

ł

niony warunek

niony warunek

FOR EACH ROW: wyzwalacz wykonuje si

FOR EACH ROW: wyzwalacz wykonuje si

ę

ę

dla ka

dla ka

ż

ż

dej

dej

modyfikowanej krotki

modyfikowanej krotki

background image

103

Definiowanie procedury wyzwalanej

Dla procedur wyzwalanych uruchamianych na skutek uaktualnienia

krotek, możemy określić listę atrybutów relacji, których
uaktualnienie uruchomi procedurę.

CREATE OR REPLACE TRIGGER test

AFTER UPDATE OF placa_pod, id_zesp ON

pracownicy ...

background image

104

Definiowanie procedury wyzwalanej

Ta sama procedura może być wrażliwa na kombinacje instrukcji

DML (tj. INSERT, UPDATE, DELETE). (niezgodne ze
standardem)

CREATE OR REPLACE TRIGGER test

AFTER INSERT OR UPDATE OR DELETE ON

pracownicy

BEGIN

IF INSERTING THEN ...

ELSIF UPDATING THEN ...

END IF;

END;

background image

105

Klauzula FOR EACH ROW i WHEN

CREATE OR REPLACE TRIGGER test
BEFORE UPDATE ON pracownicy
FOR EACH ROW WHEN (OLD.placa_dod < 100)
BEGIN

IF (:NEW.placa_pod <= 100) THEN ... END IF;
IF (:NEW.etat != :OLD.etat) THEN ... END IF;

END;

w klauzuli WHEN i ciele wyzwalacza FOR EACH ROW mo

w klauzuli WHEN i ciele wyzwalacza FOR EACH ROW mo

ż

ż

na

na

uzyska

uzyska

ć

ć

dost

dost

ę

ę

p do starej i nowej warto

p do starej i nowej warto

ś

ś

ci atrybutu

ci atrybutu

domy

domy

ś

ś

lnie stara i nowa wersja rekordu s

lnie stara i nowa wersja rekordu s

ą

ą

dost

dost

ę

ę

pne przez nazwy

pne przez nazwy

OLD i NEW (w ciele wyzwalacza poprzedzane dwukropkiem),

OLD i NEW (w ciele wyzwalacza poprzedzane dwukropkiem),

mo

mo

ż

ż

na to zmieni

na to zmieni

ć

ć

za pomoc

za pomoc

ą

ą

klauzuli REFERENCING NEW AS

klauzuli REFERENCING NEW AS

n

n

dla instrukcji INSERT stara warto

dla instrukcji INSERT stara warto

ść

ść

jest pusta, dla instrukcji

jest pusta, dla instrukcji

DELETE nowa warto

DELETE nowa warto

ść

ść

jest pusta

jest pusta

background image

106

Procedura wyzwalana INSTEAD OF

Pozwala na zapewnianie modyfikowalności złożonych perspektyw.

CREATE OR REPLACE VIEW zesp_count AS

SELECT z.nazwa, count(*) AS pracownicy

FROM pracownicy p, zespoly z WHERE z.id_zesp = p.id_zesp

GROUP BY z.nazwa;

CREATE OR REPLACE TRIGGER trig_instead

INSTEAD OF INSERT ON zesp_count

FOR EACH ROW

BEGIN

INSERT INTO zespoly(id_zesp,nazwa,adres)

VALUES(80,:NEW.nazwa,NULL);

END;

background image

107

Zarządzanie procedurami
wyzwalanymi

Wszystkie procedury wyzwalane związane z dana relacja można

zablokować (odblokować) pojedynczym poleceniem:

ALTER TABLE nazwa_relacji DISABLE [ENABLE] ALL TRIGGERS;

Ka

Ka

ż

ż

da procedura wyzwalana mo

da procedura wyzwalana mo

ż

ż

e by

e by

ć

ć

w jednym z dw

w jednym z dw

ó

ó

ch

ch

stan

stan

ó

ó

w: odblokowania lub zablokowania. Do zablokowania

w: odblokowania lub zablokowania. Do zablokowania

(odblokowania) pojedynczej procedury wyzwalanej s

(odblokowania) pojedynczej procedury wyzwalanej s

ł

ł

u

u

ż

ż

y

y

polecenie:

polecenie:

ALTER TRIGGER nazwa DISABLE [ENABLE];

Do usuni

Do usuni

ę

ę

cia wyzwalacza s

cia wyzwalacza s

ł

ł

u

u

ż

ż

y polecenie

y polecenie

DROP TRIGGER nazwa;

background image

108

Słownik bazy danych

Informacje o procedurach wyzwalanych użytkownika mieszczą się w

perspektywie systemowej USER_TRIGGERS

Informacje o zależnościach można podejrzeć w perspektywie słownika

bazy danych USER_DEPENDENCIES

SELECT TRIGGER_NAME, TRIGGER_TYPE,

TRIGGERING_EVENT, TABLE_NAME, TRIGGER_BODY

FROM USER_TRIGGERS;

SELECT NAME, TYPE, REFERENCED_TYPE

FROM USER_DEPENDENCIES

WHERE REFERENCED_NAME = 'PRACOWNICY';

background image

109

Fazy cyklu
życia
aplikacji z
bazą danych

Konceptualne

projektowanie bazy danych

Planowanie

bazy danych

Definicja systemu

Gromadzenie

i analiza wymagań

Projektowanie

bazy danych

Selekcja SZBD

Projektowanie aplikacji

Logiczne projektowanie

bazy danych

Fizyczne projektowanie

bazy danych

Tworzenie prototypów

Implementacja

Konwersja

i przenoszenie danych

Testowanie

Bieżąca konserwacja

background image

Procedury, operatory, podtablice,
programy…

background image

Typy definiowane przez użytkownika

background image

Abstrakcyjne typy danych (ADT-
abstract data type)

background image

Abstrakcyjne typy danych-cd…

background image

Typy referencyjne

background image

Przykład użycia referencji

background image

Kolekcje – nowy typ danych

background image

Wyszukiwanie z kolekcji

background image

Duże obiekty BLOB (

b

inary

l

arge

ob

ject) CLOB

(

c

haracter

l

arge

ob

ject)

background image

ADT - dziedziczenie

background image

Tablice z ADT, operacje na ADT

background image

Podtablice i nadtablice

background image

Procedury w SQL3

background image

Rozszerzenia proceduralne w SQL3

background image

Rozszerzenia SQL3 w zakresie
wyzwalaczy

background image

Podsumowanie

background image

Podsumowanie…cd…


Wyszukiwarka

Podobne podstrony:
bd cz 2 jezyki zapytan do baz danych
cz 2 Języki zapytań do baz danych
bd cz 2 jezyki zapytan do baz danych
problematyka masoowego dostepu do baz danych mity i fakty mqsixoztwl26gv7afh6a6hsnoalkzz6a5q7na7a M
BD Wykad 1 Wprowadzenie do baz danych id 8 (2)
dostep uzytkownikow mobilnych do baz danych wap, pqa, mbts zkpjy2ly76foe7e2jm5bgz7ytxqqyaxaghe36ha
lab1Wstęp teoretyczny do baz danych, bazy danych
Wprowadzenie do baz danych, Bazy Danych
problematyka masoowego dostepu do baz danych mity i fakty mqsixoztwl26gv7afh6a6hsnoalkzz6a5q7na7a M
Wprowadzenie do baz danych
Dostep uzytkownikow mobilnych do baz danych WAP, PQA, MBTS
Wprowadzenie do baz danych wpbada
Wprowadzenie do baz danych wpbada
BD Wykˆad 1 Wprowadzenie do baz danych
Do Baz Danych
Wprowadzenie do baz danych 2

więcej podobnych podstron