1 SBD, L.Banachowski Oprogramowanie strony serwera cz. 1 Powtórzenie wyk ł adu 6
2 SBD, L.Banachowski Aplikacja bazodanowa - strona 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.
3 SBD, L.Banachowski Więzy spójności encji Ograniczają możliwe wartości w wierszu tabeli: Więzy klucza głównego PRIMARY KEY Więzy klucza jednoznacznego UNIQUE Więzy NOT NULL Więzy CHECK
4 SBD, L.Banachowski Więzy spójności referencyjnej Więzy klucza obcego: REFERENCES tabela FOREIGN KEY kolumna REFERENCES tabela(kolumna) ON DELETE CASCADE ON DELETE SET NULL
5 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.
6 SBD, L.Banachowski Język PL/SQL 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; Wersja statyczna: SELECT, INSERT, UPDATE, DELETE, COMMIT i ROLLBACK.
7 SBD, L.Banachowski Komunikacja PL/SQL z SQL*Plus ACCEPT rocz_zarob PROMPT 'Podaj roczne zarobki: ' VARIABLE mies NUMBER BEGIN :mies := &rocz_zarob/12; END; / PRINT Mies
8 SBD, L.Banachowski Instrukcja SELECT w PL/SQL DECLARE v_ename Emp.Ename%TYPE; BEGIN SELECT Ename INTO v_ename FROM Emp WHERE Empno = 1030; DBMS_OUTPUT.PUT_LINE('Nazwisko ='||v_ename); ……
9 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 ).
10 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;
11 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 ;
12 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 ;
13 SBD, L.Banachowski Instrukcja pusta Null
14 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;
15 SBD, L.Banachowski Wyjątki definiowane przez programistę 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'); END;
16 SBD, L.Banachowski Podnoszenie wyjątku za pomocą Raise_Application_Error Przypisanie mu numeru między –20000 a –20999 i tekstu. BEGIN..... Raise_Application_Error(-20100,'Błąd');
17 SBD, L.Banachowski Obsługa błędów przechwytywanych przez serwer bazy danych Obsługa błędu naruszenia więzów klucza obcego - nr -2292: DECLARE bl_klucz_o EXCEPTION; PRAGMA EXCEPTION_INIT (bl_klucz_o, -2292); BEGIN DELETE FROM Dept WHERE Deptno = 10; EXCEPTION WHEN bl_klucz_o THEN Dbms_output.Put_line ('Nie można usunąć działu, w którym są pracownicy. '); END;