Ćwiczenie 8 9 : Procedury składowane, wyzwalacze (Oracle PL/SQL)

Transkrypt

Ćwiczenie 8 9 : Procedury składowane, wyzwalacze (Oracle PL/SQL)
[email protected] Grupa piątek 12:15 ­ 14:00 12.12.2014 Ćwiczenie 8 ­ 9 : Procedury składowane, wyzwalacze (Oracle PL/SQL) W ramach ćwiczeń należy wykonać: 1. Blok anonimowy Wykonać przykładowy blok anonimowy (DECLARE/BEGIN/END). Zadeklarować zmienną, której wartość jest pobierana jako parametr uruchomienia (&nazwa_parametru). Wprowadzić sekwencje przykładowych poleceń SQL z wykorzystaniem wcześniej zadeklarowanej zmiennej. Wypisać wynik działania używając procedury put_line z pakietu DBMS_OUTPUT. 2. Funkcje Napisać funkcje zwracając przykładowo: dla podanego identyfikatora klienta sumę cen(ilości) towarów wszystkich pozycji.
Po skompilowaniu zaprezentować możliwość wykorzystania funkcji w zapytaniu SQL. 3. Procedura składowana z wykorzystaniem kursora Należy wykonać procedurę z przetwarzaniem wymagającym użycia kursora. Procedura powinna pobierać jak i zwracać argumenty. Np. funkcja bonifikaty dla klienta. Przyjmuje parametry id klienta oraz procent bonifikaty. Dla każdego nie zrealizowanego zamówienia daje bonifikatę o podany w argumencie procent. Zwraca kwotę całej bonifikaty jaką uzyskał klient. 4. Wyzwalacz uzupełniający id z sekwencji dla nowo wstawianych wierszy Należy utworzyć obiekt typu sekwencja, nadać mu odpowiednią wartość początkową, końcową oraz o ile będzie następowała inkrementacja. Dla wybranej tabeli posiadającej sztuczny klucz główny należy dodać odpowiedni wyzwalacz, który dla nowych wstawianych rekordów uzupełni ten klucz. Dla wykonanego wyzwalacza napisać test wstawienia poprawnego wiersza oraz próby wstawienia wiersza naruszającego jeden z warunków integralności. 5. Wyzwalacz sprawdzający integralność danych Wykonać wyzwalacz sprawdzający złożony warunek integralności danych. Przykład: Dla nowo tworzonych pozycji zamówienia, wywołujemy funkcję z punktu 2 i sprawdzamy czy klient nie przekroczył dopuszczalnej ceny/liczby towarów. W przypadku przekroczenia, sygnalizujemy to błędem: RAISE_APPLICATION_ERROR(­20001, 'Błąd! Klient przekroczył limit sumarycznej kwoty zamówień o: ‘ || kwota), 6. Audit trail Utworzyć generyczną tabelę do przechowywania informacji o audycie, np: CREATE TABLE AUDIT_TRAIL ( TABLE_NAME VARCHAR2(100), OPERATION VARCHAR2(30), ID NUMBER(30,0), UPD_DATE DATE, FIELD_NAME VARCHAR2(100), OLD_VALUE VARCHAR2(500), NEW_VALUE VARCHAR2(500), USER_NAME VARCHAR2(30) ) W razie potrzeb dostosować typ identyfikatora i innych pól. Wybrać tabelę do audytu, np. zamówienia. Utworzyć wyzwalacze, które będą monitorowoły zmiany w tabeli i logowały je do tabeli z informacjami o audycie. 7. Wyzwalacz dla widoku ­ “INSTEAD OF” Założyć tabelę: DEPARTAMENTY ( ID_DEP, NAZWA_DEPARTAMENTU). Założyć tabelę: PRACOWNICY (ID_PRAC, IMIE, NAZWISKO, ID_DEP). Utworzyć widok wyświetlający IMIE, NAZWISKO oraz DEPARTAMENT. Umożliwić na utworzonym widoku operację wstawienia (INSERT), która: ­ jeżeli pracownik nie istnieje, utworzy go i nada odpowiednie id(sekwencja) ­ jeżeli departament nie istnieje, utworzy go i nada odpowiednie id(sekwencja) ­ powiąże odpowiednio pracownika z departamentem. Efekty swoje pracy wraz z krótkim komentarzem należy zapisać w pliku imie.nazwisko.sql. Jeżeli obiekty tworzyło się z wykorzystaniem GUI SQL Developera, należy umieścić odpowiednie skrypty DDL w pliku.