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.