lesson4

background image

1

SBD, L.Banachowski

Oprogramowanie strony

serwera na przykładzie

Oracle

Część 1

Wykład 4

background image

2

SBD, L.Banachowski

Aplikacja bazodanowa

• Tworząc aplikację, należy podjąć decyzję, jaka jej
część ma się znajdować, na:

• serwerze bazy danych,
• jaka na komputerze użytkownika (czyli po
stronie klienta).

• Dane oraz mechanizm wykonywania instrukcji SQL
- po stronie serwera.

• “Przyjazny” interfejs użytkownika – po stronie
klienta.

• Przetwarzanie danych:

• na serwerze - centralna kontrola nad spójnością
danych,

• na stacji klienckiej - precyzyjniejsza diagnostyka i
obsługa błędów.

background image

3

SBD, L.Banachowski

Aplikacja bazodanowa

Elementy aplikacji umieszczane po stronie serwera:

1. deklaratywne więzy spójności,

2. procedury, funkcje i pakiety,

3. wyzwalacze bazy danych,

4. procedury/klasy

(serwlety)

hipertekstowe

tworzące dynamiczne strony WWW,

5. rozproszone komponenty jak klasy Javy - EJB.

background image

4

SBD, L.Banachowski

Rozszerzenie języka SQL o elementy
języka programowania

• SQL/PSM - Standard SQL:1999
• Oracle PL/SQL

background image

5

SBD, L.Banachowski

Więzy spójności

Zadaniem

więzów

spójności

jest

zagwarantowanie tego, aby dane w bazie danych
wiernie odzwierciedlały świat rzeczywisty, dla
którego baza danych została zaprojektowana.

• System bazy danych ma zapewnić, aby więzy
spójności pozostawały prawdziwe przy wszystkich
operacjach wykonywanych na bazie danych w
postaci transakcji, wyzwalaczy, ładowania danych
do bazy danych czy ich importu.

background image

6

SBD, L.Banachowski

Deklaratywne więzy
spójności

• Więzy spójności mogą być sprawdzane zarówno po
stronie serwera jak i po stronie klienta:

• Bardziej naturalnym miejscem sprawdzania
jest serwer, który obsługuje wszystkie możliwe
aplikacje utworzone dla bazy danych. Lepiej jest
mieć jeden mechanizm gwarantujący spełnienie
więzów spójności niż wiele, potencjalnie nie
spójnych.

• Podstawowe metody określania więzów
spójności na serwerze:

deklaratywne więzy spójności – w definicjach
tabel (instrukcje

CREATE TABLE

i

ALTER TABLE

),

wyzwalacz bazy danych,
• osobny interfejs programistyczny API.

background image

7

SBD, L.Banachowski

Więzy spójności
encji

Ograniczają możliwe wartości w wierszu tabeli:

Więzy klucza głównego

PRIMARY KEY

– wartości w

określonych kolumnach jednoznacznie identyfikują
wiersz. Nie jest dopuszczalna wartość NULL w
kolumnach klucza głównego. Automatycznie jest
zakładany indeks na kolumnach tworzących klucz
główny. Tylko jeden klucz główny dla jednej tabeli.

Więzy klucza jednoznacznego

UNIQUE

– wartości w

określonych kolumnach jednoznacznie identyfikują
wiersz. Jest dopuszczalna wartość NULL w kolumnach
klucza jednoznacznego. Automatycznie jest zakładany
indeks na kolumnach tworzących klucz jednoznaczny.
Może być więcej niż jeden klucz jednoznaczny dla
jednej tabeli.

background image

8

SBD, L.Banachowski

Więzy spójności encji

Więzy

NOT NULL

– w kolumnie nie jest

dozwolona wartość NULL.

Więzy

CHECK

– warunek, który ma być

prawdziwy dla wszystkich wierszy w tabeli. Nie
może zawierać podzapytania ani funkcji zmiennych
w czasie jak Sysdate lub User. Może zawierać
nazwy jednej lub więcej kolumn.

background image

9

SBD, L.Banachowski

Więzy spójności
referencyjnej

• Zbiór wartości w kolumnach klucza obcego jest
zawsze podzbiorem zbioru wartości odpowiadającego
mu klucza głównego lub jednoznacznego.

• Wartością klucza obcego może być NULL – wówczas
klucz obcy nie wskazuje na żaden obiekt.

• System zapewnia, aby obiekt wskazywany przez
wartość klucza obcego zawsze istniał, przy wszystkich
możliwych operacjach na tabelach, w których biorą
udział klucze główne, jednoznaczne i obce.

background image

10

SBD, L.Banachowski

Klucze obce

•  Przy definiowaniu klucza obcego nie można się
odwoływać ani do synonimu tabeli ani do tabeli
znajdującej się w innej (odległej) bazie danych.

• Nie tworzy się automatycznie indeks.

• Aby przyśpieszyć wyszukiwanie i złączanie,
projektant bazy danych może sam zaplanować
założenie indeksu na kluczu obcym przy użyciu
instrukcji

CREATE INDEX

.

background image

11

SBD, L.Banachowski

Składnia więzów w-linii

• [NOT] NULL
• {UNIQUE|PRIMARY KEY}
• CHECK (warunek)
• REFERENCES tabela[(kolumna)][ON DELETE
CASCADE]

• REFERENCES tabela[(kolumna)][ON DELETE SET
NULL]

background image

12

SBD, L.Banachowski

Składnia więzów-poza-linią

• {UNIQUE|PRIMARY KEY} (kolumna,…)
• CHECK (warunek)
• FOREIGN KEY (kolumna,…) REFERENCES
tabela(kolumna,…)[ON DELETE [CASCADE|SET NULL]]

CONSTRAINT nazwa_więzów

• Nadanie nazwy, przy pomocy której można się do
nich odwoływać, np. włączając je, wyłączając lub
usuwając.

background image

13

SBD, L.Banachowski

Przykład

CREATE TABLE Pożyczki(
Num_konta NUMBER(6,0),
Num_pożyczki NUMBER(6,0),
Typ_pożyczki VARCHAR2(8)

CONSTRAINT ck_Typ_poż

CHECK (Typ_pożyczki IN
('AUTO', 'DOM', 'OSOBISTE')),
Wielkość NUMBER(8,0)

CONSTRAINT nn_Wielk

NOT NULL,
Data_pożyczki DATE DEFAULT Sysdate,
Zaakceptowana VARCHAR2(25)

CONSTRAINT

ko_Zaakcept

REFERENCES
Kierownicy (Nazwisko_kier),

CONSTRAINT kg_Poż

PRIMARY KEY(Num_konta,

Num_pożyczki),

CONSTRAINT ko_Num_konta

FOREIGN KEY (Num_konta) REFERENCES
Klienci (Num_konta)
);

background image

14

SBD, L.Banachowski

DEFAULT

DEFAULT Sysdate

• Ustala datę pożyczki na dzień dzisiejszy, to
jest dzień wprowadzania informacji o pożyczce
do bazy danych.

• W specyfikacji wartości domyślnej mogą
występować stałe i funkcje SQL także User,
Sysdate.

• Nie mogą występować ani nazwy kolumn ani
funkcje PL/SQL ani sekwencje.

background image

15

SBD, L.Banachowski

CHECK

• W przypadku warunku występującego w CHECK
akceptowane są wiersze, których wartością jest

TRUE

lub

NULL

System nie pozwala, aby w tabeli pojawił się
wiersz dający wartość FALSE (sygnalizowany jest
błąd).

background image

16

SBD, L.Banachowski

Akcje referencyjne przy DELETE

Jeśli ma być usunięty wiersz tabeli nadrzędnej do którego

są odwołania przez klucz obcy z tabeli podrzędnej, jest błąd i
DELETE nie zostaje wykonane.

ON DELETE CASCADE

- razem z wierszem tabeli nadrzędnej

zostają usunięte wszystkie wiersze tabeli podrzędnej, w
których wartości klucza obcego wskazują na usuwany wiersz,

• pod warunkiem, że usunięcie tych wierszy jest
możliwe bez naruszenia innych więzów referencyjnych.

ON DELETE SET NULL

- przy usuwaniu wiersza, do którego

są odwołania przez wartości kluczy obcych, następuje
wstawienie pseudo-wartości NULL jako wartości klucza
obcego.

background image

17

SBD, L.Banachowski

Inne akcje referencyjne
Standardu (nie realizowane
przez Oracle)

ON DELETE SET DEFAULT

– oznaczająca

wstawienie wartości domyślnej jako wartości klucza
obcego;

ON UPDATE [CASCADE|SET NULL|SET DEFAULT]

W Oracle można je zaprogramować za pomocą
wyzwalaczy bazy danych, pod warunkiem, że nie
zdefiniujemy deklaratywnych więzów klucza obcego.

background image

18

SBD, L.Banachowski

CHECK

• Gdy klucz obcy składa się z kilku kolumn i w jednej z
nich jest wartość NULL, wtedy system akceptuje taką
wartość wiersza bez żadnych dodatkowych sprawdzeń.

• Gdybyśmy chcieli realizować semantykę polegającą
na tym, że albo wszystkie wartości klucza obcego są
NULL albo żadna z nich nie jest, wówczas należałoby
zagwarantować to za pomocą odpowiedniego warunku
CHECK np. :

 

CONSTRAINT A_B_ck CHECK (((A IS NOT NULL) AND
(B IS NOT NULL)) OR((A IS NULL) AND (B IS NULL)))

background image

19

SBD, L.Banachowski

Operacje na więzach

ALTER TABLE Emp
ADD (CONSTRAINT Sal_ck CHECK (sal
>5000));

 

ALTER TABLE Emp
ENABLE CONSTRAINT Sal_ck;

 
ALTER TABLE Emp
DISABLE CONSTRAINT Sal_ck; 

ALTER TABLE emp
DROP CONSTRAINT Sal_ck;

Więzy klucza głównego i
jednoznacznego

można

włączać,

wyłączać

i

usuwać

używając

ich

naturalnych nazw PRIMARY
KEY i UNIQUE.

background image

20

SBD, L.Banachowski

SQL*Plus – prosty interfejs do
bazy danych

SET AUTOCOMMIT ON

– wykonywanie operacji

zatwierdzania COMMIT po każdej zmianie danych (a nie
tylko na koniec pomyślnej transakcji);

HOST polecenie

– wykonanie polecenia systemu

operacyjnego;

EXIT

– zakończenie sesji SQL*Plus –

wylogowanie się z Oracle;

DESCRIBE nazwa

– wyświetlenie schematu

obiektu (tabeli, perspektywy, procedury, funkcji) o
podanej nazwie;

EXECUTE nazwa_procedury (...)

– wykonanie

procedury.

background image

21

SBD, L.Banachowski

Pliki w SQL*Plus

START nazwa_pliku

– wykonaj skrypt poleceń SQL

i SQL*Plus zapisany w pliku o podanej nazwie (zamiast
START można użyć@);

ED nazwa_pliku

– wywołaj standardowy edytor

(np. notepad albo vi);

SPOOL nazwa_pliku

– zapisuj kolejne polecenia i

ich wyniki w pliku o podanej nazwie;

SPOOL OFF

– zamknij poprzednio otwarty przez

SPOOL plik.

background image

22

SBD, L.Banachowski

Formatowanie w SQL*Plus

COLUMN nazwa FORMAT An

– szerokość

wyświetlania kolumny napisowej o podanej nazwie;

COLUMN nazwa FORMAT 99999

– szerokość

wyświetlania kolumny liczbowej o podanej nazwie (9
reprezentuje jedną cyfrę);

SET PAGESIZE n

– ustalenie długości jednej strony

na n linii;

SET PAUSE ON

– zatrzymywanie przewijania

wyświetlania wyników po wyświetleniu zawartości
ekranu;

background image

23

SBD, L.Banachowski

Zmienne w SQL*Plus

VARIABLE X NUMBER

(lub

CHAR(n)

lub

VARCHAR(n)

, n>0) – deklaracja zmiennej wiązania;

EXECUTE :X:= wyrażenie;

– przypisz zmiennej

wiązania

:X

wartość wyrażenia. Po ustaleniu wartości

można zmienne wiązania poprzedzone dwukropkiem
używać w instrukcjach SQL i PL/SQL.

PRINT X

– wypisz wartość zmiennej wiązania X;

ACCEPTZmienna PROMPT 'Podaj wartość

zmiennej: '

- utworzenie zmiennej podstawienia i

wczytanie na nią wartości. Następnie można zmienne
podstawienia poprzedzone znakiem & używać w
instrukcjach SQL i PL/SQL.

background image

24

SBD, L.Banachowski

Język PL/SQL

Język

PL/SQL

jest proceduralnym rozszerzeniem

języka SQL i stanowi podstawę do pisania aplikacji
Oracle – jest mianowicie dostępny w różnych
programach narzędziowych ORACLE np.

1. SQL*Plus,

2. Developer 2000 (Oracle*Forms i Oracle*Reports),

3. prekompilatory,

4. procedury,

5. wyzwalacze,

6. aplikacje na stronach WWW.

background image

25

SBD, L.Banachowski

Blok anonimowy

DECLARE

deklaracje obiektów PL/SQL jak zmienne, stałe,

wyjątki, procedury, funkcje

BEGIN

ciąg instrukcji do wykonania

EXCEPTION

obsługa wyjątków (błędów)

END;

•  Deklaracje i obsługa wyjątków są opcjonalne. Bloki
mogą być zagnieżdżone.

• Instrukcje SQL w bloku PL/SQL: SELECT, INSERT,
UPDATE, DELETE, COMMIT i ROLLBACK.

background image

26

SBD, L.Banachowski

Przykład

DECLARE
v_stan NUMBER(5);

BEGIN
SELECT Stan INTO v_stan FROM
Magazyn
WHERE Produkt =
'Fiat';
IF v_stan > 0 THEN
UPDATE Magazyn SET Stan =
Stan - 1
WHERE Produkt = 'Fiat';
INSERT INTO Zakupy
VALUES ('Kupiono Fiata',
Sysdate);
ELSE
INSERT INTO Zakupy
VALUES ('Brak Fiatów',
Sysdate);
END IF;
COMMIT;

EXCEPTION
WHEN no_data_found THEN

INSERT INTO dziennik
VALUES('Nie znaleziono
FIATa');
END;

background image

27

SBD, L.Banachowski

Komentarze

• między nawiasami /* i */ , albo
• od dwóch kresek -- do końca bieżącej linii.

background image

28

SBD, L.Banachowski

Deklaracje zmiennych i
stałych

v_zarobki NUMBER(7,2);

pi CONSTANT NUMBER(7,5) := 3.14159;

v_nazwisko VARCHAR2(25) := 'Kowalski';

v_data DATE := Sysdate;

żonaty BOOLEAN := False;

liczba_dzieci BINARY_INTEGER :=0;

background image

29

SBD, L.Banachowski

Deklaracje zmiennych i
stałych

• Deklaracji zmiennych tych samych typów nie można
łączyć razem jak w innych językach!

• W PL/SQL są dostępne typy danych z języka SQL a
ponadto m.in.

BOOLEAN

- wartości logiczne,

BINARY_INTEGER

- typ liczb całkowitych –

niezależny od podtypów typu NUMBER i przez to
wymagający przy zapisie mniej miejsca w pamięci
RAM.

• Nie należy zmiennej nadawać tej samej nazwy co
kolumnie w tabeli.

• Wewnątrz bloku PL/SQL instrukcja SELECT nie
wypisuje wyników na ekran (ani do pliku).

• Zmienne i stałe PL/SQL mogą występować w
instrukcjach SQL.

background image

30

SBD, L.Banachowski

Wprowadzanie danych z
klawiatury i wypisywanie na
ekran

SET ServerOutput ON

ACCEPT rocz_zarob PROMPT 'Podaj roczne zarobki: '

DECLARE

mies NUMBER(9,2) := &rocz_zarob;

BEGIN

mies := mies/12;

DBMS_OUTPUT.PUT_LINE ('Miesięczne zarobki = '
||mies);

END;

/

background image

31

SBD, L.Banachowski

Wprowadzanie danych z
klawiatury i wypisywanie na
ekran

ACCEPT rocz_zarob PROMPT 'Podaj roczne
zarobki: '

VARIABLE mies NUMBER

BEGIN

:mies := &rocz_zarob/12;

END;

/

PRINT Mies

background image

32

SBD, L.Banachowski

Zmienne systemowe

SQL%ROWCOUNT

-- liczba wierszy przetworzonych

przez ostatnią instrukcję SQL;

SQL%FOUND

= TRUE jeśli został znaleziony

(przetworzony) przynajmniej jeden wiersz;

SQL%NOTFOUND

= TRUE jeśli żaden wiersz nie

został znaleziony (przetworzony);

SQLERRM

- tekstowa informacja o błędzie;

SQLCODE

- kod błędu.

Obu zmiennych SQLERRM i SQLCODE można używać
tylko w sekcji EXCEPTION!

background image

33

SBD, L.Banachowski

Przykład

Przykład użycia zmiennej SQL%ROWCOUNT do

obliczenia liczby usuwanych działów o numerze 50:

 
DECLARE usunięte NUMBER;
BEGIN
DELETE FROM Dept WHERE Deptno = 50;
usunięte := SQL%ROWCOUNT;
INSERT INTO Dziennik
VALUES ('Dział', usunięte,
Sysdate);
END;

background image

34

SBD, L.Banachowski

Instrukcja SELECT w PL/SQL

Aby instrukcja była poprawna, instrukcja SELECT …
INTO musi zwracać dokładnie jeden wiersz
wyników!

SELECT Ename
INTO v_ename
FROM Emp
WHERE Empno = 1030;

 Wartości w bloku PL/SQL, pochodzą na ogół z bazy
danych, gdzie został określony ich typ danych. W
związku z tym, wygodnie jest określać typ danych
jako ''typ danych wymienionej kolumny'' np.

 

Emp.Ename%TYPE

background image

35

SBD, L.Banachowski

Standardowe, nazwane
wyjątki

dup_val_on_index

(ta sama wartość w indeksie

jednoznacznym),

no_data_found

(instrukcja SELECT nie zwróciła

wartości dla zmiennych w klauzuli INTO),

too_many_rows

(instrukcja SELECT zwróciła

więcej niż jeden wiersz wartości dla zmiennych w
klauzuli INTO),

zero_divide

(dzielenie przez zero),

timeout_on_resource

(zbyt długie oczekiwanie

na zasoby),

invalid_cursor

(niepoprawna operacja na

kursorze),

invalid_number

(niepoprawna konwersja na

liczbę).

background image

36

SBD, L.Banachowski

Wyjątki

…..

SELECT Ename, Job INTO v_ename, v_job

…..

EXCEPTION
WHEN

no_data_found

THEN

INSERT INTO Dziennik VALUES ('Nikt nie zatrudniony

w 1993');

DBMS_OUTPUT.Put_line('Nikt nie zatrudniony w 93');

WHEN

too_many_rows

THEN

INSERT INTO Dziennik VALUES ('Więcej niż 1

zatrudniony w 1993');

DBMS_OUTPUT.Put_line('Więcej niż 1 w 93');

WHEN

OTHERS

THEN -- Obsługa pozostałych błędów

komunikat := 'Błąd nr.= ' ||
SQLCODE|| ',

komunikat= ' || Substr(SQLERRM,1,100);

-- SQLCODE i SQLERRM nie mogą wystąpić

w instrukcji SQL!
INSERT INTO Dziennik VALUES (komunikat);
DBMS_OUTPUT.Put_line(‘Wystąpił inny błąd ');
END;

background image

37

SBD, L.Banachowski

Obsługa wyjątków

• Jeśli blok, w którym wystąpił błąd, zawiera
obsługę tego błędu, to po dokonaniu obsługi,
sterowanie jest w zwykły sposób przekazywane do
bloku go zawierającego (nadrzędnego).

• Jeśli nie zawiera, następuje przekazanie błędu do
bloku zawierającego dany blok i albo tam nastąpi
jego obsługa albo błąd przechodzi do środowiska
zewnętrznego.

background image

38

SBD, L.Banachowski

Obsługa wyjątków

• Błąd, który wystąpił w sekcji wykonawczej bloku
(między BEGIN i END) jest obsługiwany w sekcji
EXCEPTION tego samego bloku. Błędy, które wystąpią w
sekcji deklaracji lub w sekcji wyjątków są przekazywane
do bloku zawierającego dany blok.

• Dobra praktyka programistyczna wymaga aby każdy
błąd został obsłużony – ewentualnie w klauzuli WHEN
OTHERS THEN najbardziej zewnętrznego bloku.

• Aby móc stwierdzić, która instrukcja SQL
spowodowała błąd:

• można używać podbloków z własną obsługą
błędów, albo

• można używać licznika, zwiększającego się o
jeden po wykonaniu każdej instrukcji SQL.

background image

39

SBD, L.Banachowski

Instrukcje warunkowe

IF warunek THEN ciąg_instrukcji
END IF;

  IF warunek THEN
ciąg_instrukcji
ELSE
ciąg_instrukcji
END IF;
 
IF warunek THEN
ciąg_instrukcji
ELSIF warunek THEN
ciąg_instrukcji
END IF;

 

• Instrukcje po THEN są
wykonywane

wtedy,

gdy

wartością warunku jest TRUE.

• Instrukcje po ELSE są
wykonywane

wtedy,

gdy

wartością warunku jest FALSE
lub NULL.

background image

40

SBD, L.Banachowski

Instrukcje iteracji

LOOP
ciąg instrukcji (w tym EXIT lub EXIT WHEN
warunek)
END LOOP;
 
FOR zmienna IN wartość1 .. wartość2
LOOP … END LOOP;
 
WHILE warunek
LOOP … END LOOP;

background image

41

SBD, L.Banachowski

Instrukcja pusta

Null

– na przykład, gdy obsługa wyjątku jest

pusta.

background image

42

SBD, L.Banachowski

Zmienne wierszowe

DECLARE
rek_osoby Emp%ROWTYPE; /* Typ wierszowy
*/
BEGIN
SELECT * INTO rek_osoby
FROM Emp WHERE Ename = 'KOWALSKI';
rek_osoby.Sal := 1.1*rek_osoby.Sal;
INSERT INTO Dziennik
VALUES (rek_osoby.Ename, rek_osoby.Job,

rek_osoby.Sal, SYSDATE);
END;

Zmiennej wierszowej nie można użyć bezpośrednio
po słowie kluczowym VALUES w instrukcji INSERT
INTO!

background image

43

SBD, L.Banachowski

Rekordy PL/SQL, zmienne
rekordowe

TYPE Typ_rek_prac IS RECORD
( numer_prac NUMBER(4) NOT NULL,
nazwisko VARCHAR2(40) NOT

NULL,

zarobki NUMBER(8,2),

num_działu NUMBER(4));
rekord_prac Typ_rek_prac;

Typy rekordowe mogą być zagnieżdżone. Dostęp do
pól rekordu jest przy pomocy notacji kropkowej. Na
zmienną rekordową można przypisać wartość innej
zmiennej rekordowej, ale tylko tego samego typu
rekordowego. Można ich używać w klauzuli INTO
(tak jak zmiennych wierszowych):

SELECT * INTO rekord_prac

FROM Pracownicy
WHERE Id_prac =

12;

background image

44

SBD, L.Banachowski

Wyjątki definiowane przez
programistę

Wyjątki można deklarować samemu (w sekcji
DECLARE) używając słowa kluczowego EXCEPTION

nazwa_wyjątku EXCEPTION;

powodować ich podniesienie (w sekcji instrukcji)

RAISE nazwa_wyjątku;

a następnie je obsługiwać (w sekcji EXCEPTION)

WHEN nazwa_wyjątku THEN ...

background image

45

SBD, L.Banachowski

Przykład

DECLARE

brak_w_magazynie

EXCEPTION

;

v_liczba NUMBER(5);
BEGIN
SELECT Liczba
INTO v_liczba
FROM Magazyn WHERE Marka =
'Fiat';
IF v_liczba < 1 THEN

RAISE

brak_w_magazynie

;

END IF;

EXCEPTION

WHEN

brak_w_magazynie

THEN

INSERT INTO Zamówienia
VALUES ('Fiaty');

RAISE

wyjście;

END;

background image

46

SBD, L.Banachowski

Podnoszenie wyjątku za pomocą
Raise_Application_Error

• Przypisanie mu numeru między –20000 a –20999 i
tekstu.

• Wyjątek taki może zostać obsłużony albo w tym
samym bloku albo w aplikacji zewnętrznej, w której to
wywołanie zostanie wykonane.

DECLARE
numer INTEGER;
BEGIN .....

Raise_Application_Error(-20100,'Błąd');

EXCEPTION
WHEN OTHERS THEN
numer:=SQLCODE;
IF numer= -20100 THEN
Dbms_output.Put_line('Błąd
przechwycony!');
END IF;
END;

background image

47

SBD, L.Banachowski

Obsługa błędów
przechwytywanych przez serwer
bazy danych

Nadanie nazwy wyjątkowi systemowemu - w sekcji
deklaracji

nazwa_wyjątku EXCEPTION;

PRAGMA

EXCEPTION_INIT

(

nazwa_wyjątku

,

numer_błędu);

a następnie obsługa (w sekcji EXCEPTION)

WHEN nazwa_wyjątku THEN ...

background image

48

SBD, L.Banachowski

Przykład

Przykład obsługi błędu naruszenia więzów klucza
obcego nr -2292:

DECLARE

bl_klucz_o

EXCEPTION;

PRAGMA EXCEPTION_INIT (

bl_klucz_o

, -2292);

v_deptno Dept.Deptno%TYPE := :b_deptno;
BEGIN
DELETE FROM Dept
WHERE Deptno = v_deptno;
COMMIT;
EXCEPTION
WHEN

bl_klucz_o

THEN

Dbms_output.Put_line ('Nie można usunąć działu
' ||

To_Char(v_deptno) || ', w którym są pracownicy. ');
END;

background image

49

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

1

.

To, co klient

zamówił

background image

50

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

2

. To, co

analityk
zrozumiał

background image

51

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

3

. To, co

opisywał
projekt

background image

52

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

4

. To, co

wykonali
programiści

background image

53

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

5

. Projekt po

uruchomieniu
i wdrożeniu

background image

54

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

6

. To, za co

klient zapłacił

background image

55

SBD, L.Banachowski

Etapy budowy systemu

informatycznego dla

przedsiębiorstwa

7

. A to, czego

klient
potrzebował

background image

56

SBD, L.Banachowski


Document Outline


Wyszukiwarka

Podobne podstrony:
Lesson15
face painting lesson 3 id 16748 Nieznany
2 3 Unit 1 Lesson 2 – Master of Your Domain
konspekty gimnazjum Lesson Plan 3
grammar lesson mk
konspekty gimnazjum Lesson Plan Ib
konspekty gimnazjum lesson plan 5
GE Georgian Language Lessons
lesson 9
Lessons in Electric Circuits Vol 5 Reference
lesson3
Lesson 14 MY, MINE esp
Lesson 24
Comparatives and Superlatives LESSON
ho ho ho lesson 1 v.2 student's worksheet for 2 students, ho ho ho
grammar lesson zaliczenie MI
Inspiration 3 Unit 7 Lesson 1 (2)
Unit 5 Lesson 2

więcej podobnych podstron