ZAJĘCIA VII

Transkrypt

ZAJĘCIA VII
ZAJĘCIA VII
PAKIETY, WYJĄTKI, WYZWALACZE
Stworzyć kopie tabel: Ksiazka, Zamowienie_Ksiazka, Zamowienie. Dla klucza obcego w tabeli Zamowienie_Ksiazka
(kopii) odwołującego się do tabeli Ksiazka ustawić należy opcję ON DELETE CASCADE.
Zad. 1 (Na stworzonych kopiach)
Stworzyć blok PL/SQL a w nim dwa kursory:
• wybierający dane o książkach, które nie były zamawiane,
• wybierający dane o książkach, które były zamawiane co najmniej n razy (parametr kursora).
Używając opcji WHERE CURRENT OF, przy pomocy stworzonych kursorów: usunąć z bazy wiersze wybrane w (1) oraz
zmienić cenę książek wybranych w (2) - podwyższyć o 5%.
Zad. 2
Stworzyć tabelę pomocniczą z dwiema kolumnami (jedną numeryczną a drugą tekstową). Wypisać do tej tabeli kody
błędów Oracla oraz związane z danymi błędami wiadomości (dla błędów o kodzie mieszczącym się w przedziale ˂-1;
-200>).
Zad. 3
Dla klucza obcego (odwołującego się do kopii tabeli Ksiazka) w tabeli Zamowienie_Ksiazka (kopii) należy usunąć opcję
ON DELETE CASCADE. Powiązać tabelę kopia Ksiazka z tabelami Dostawca i Wydawca.
Stworzyć pakiet zawierający dwie procedury, jedną dodającą książkę do bazy (id_ksiazki, tytul, cena, id_dostawcy,
id_wydawcy to parametry procedury), drugą usuwającą książkę (jej identyfikator to parametr procedury) z bazy. Należy
obsłużyć także ewentualne wyjątki, które mogą wystąpić.
Jakie błędy:
• naruszenie unikalności klucza głównego (przy dodawaniu wiersza),
• brak odpowiednika (np. brak wydawcy o podanym id),
• za mało danych,
• złe typy danych: przy podawaniu ceny np. podajemy tekst (ujęty w '...'),
• naruszenie więzów integralności (klucz główny jest w jakiejś tabeli kluczem obcym bez opcji ON DELETE
CASCADE).
Zad. 4
Stworzyć pakiet zawierający:
• zmienną globalną liczba,
• kursor jawny wyznaczający dane o dostawcach i wydawcach pod warunkiem, że dany dostawca dostarczał
książki danego wydawcy,
• funkcję zwracającą ilu jest par dostawca-wydawca, wykorzystać kursor (2).
Podstawić pod zmienną liczba wynik działania funkcji (3) w ciele pakietu i wypisać jej wartość na ekran (wypisywanie,
nie w ciele pakietu).
Zad. 5 (Na stworzonych kopiach)
Napisać wyzwalacz, który będzie aktywowany przed wykonaniem polecenia wstawiania rekordów do tabeli kopii
Zamowienie. Jeśli nowa data zamówienia jest datą późniejszą niż dzisiejsza, to faktyczną datą zamówienia powinna stać
się data dzisiejsza.
Zad. 6 (Na stworzonych kopiach)
Dodać do tabeli kopii Ksiazka atrybuty: data_zmiany_ceny, którego wartości mówiły będą o dacie ostatniej zmiany ceny
danej książki oraz nr_zmiany, którego wartości mówiły będą o kolejnym numerze zmiany. Ustawić wartości tych
atrybutów: data wydania, 1.
Stworzyć wyzwalacz, który przy modyfikacji ceny w tabeli kopii Ksiazki:
• jeśli nowa cena jest większa o co najmniej 10% ceny wyjściowej, to odpowiedni komunikat powinien się pojawić
(o tytule i o za dużej podwyżce) a cena powinna pozostać bez zmian.
• w przeciwnym wypadku powinny zostać ustawione poprawne wartości atrybutów data_zmiany_ceny oraz
nr_zmiany.