zmień język: en
PL/SQL (Oracle) - drzewa, procedury składowane, CTE, triggery
Do łączenia się z bazą Oracle używamy SQL*PLUS (na maszynach wirtualnych) lub SQL Command Line (jesli mamy u siebie bazę Oracle 11gR2 XE).
SELECT level, * FROM drzewo WHERE standardoweWarunkiWyboru CONNECT BY PRIOR poleOjca = poleDziecka START WITH poleOjca = wartosc
CREATE [OR REPLACE] TRIGGER nazwa_procedury_wyzwalanej <moment uruchomienia> <zdarzenie uruchamiające> [OF <lista pól tabeli tabela>] ON tabela [ FOR EACH ROW ] [ WHEN warunek ] [ DECLARE <deklaracje zmiennych> ] BEGIN <ciało procedury wyzwalanej> END;
Dla zainteresowanych:
Masz dany schemat lotów jak w zestawie 08 (dla ułatwienia radzę wszelkie pola typu VARCHAR(256) zamienić na VARCHAR(8) - inaczej będzie to paskudnie wyglądać w SQL*PLUS). Wykonaj poniższe polecenia wykorzystując język PL/SQL w systemie Oracle (każda osoba, która zaprezentuje rozwiązanie +1 punkt z aktywności)
Stwórz trigger, który po usunięciu wierszy z tabeli bilety zmieni aktualną cenę na niższą o 10% jeśli ilośc biletów na dany lot spadnie poniżej 3. Załóż, że zawsze usuwamy bilety tylko na jeden lot w jednym zapytaniu delete.
Stwórz trigger, który po wstawieniu wierszy do tabeli bilety zmieni ich ceną na aktualną (może być FOR EACH ROW)
Stwórz trigger (może być FOR EACH ROW), który podczas wstawienia biletu sprawdzi czy w samolocie jest jeszcze wolne miejsce.
Stwórz dwa triggery na tabelach Samoloty i Helikoptery, które sprawdzą czy dodawany pojazd ma poprawne id. Jedno id nie może powtarzać się w dwóch tabelach.
Stwórz trigger na tabeli loty, które umozliwi wstawianie tylko takich lotów, których id samolotu jest w tabeli Samoloty lub Helikoptery.
Masz dany schemat:
create table T1( id INT NOT NULL, name VARCHAR(8), charge VARCHAR(4), reportsTo INT ) insert into T1 values (1, 'Smith', 'SGM', NULL); insert into T1 values (2, 'Celko', 'MSG', NULL); insert into T1 values (3, 'Ramirez', 'SFC', 2); insert into T1 values (4, 'Kovalsky', 'SSG', 1); insert into T1 values (5, 'Plateu', 'SGT', 1); insert into T1 values (6, 'Gore', 'CPL', 5); insert into T1 values (7, 'Ryan 1', 'PVT', 5); insert into T1 values (8, 'Ryan 2', 'PVT', 6); insert into T1 values (9, 'Ryan 3', 'PVT', 6); insert into T1 values (10, 'Ryan 4', 'PVT', 3); insert into T1 values (11, 'Ryan 5', 'PVT', 3);Pole reportsTo to id przełożonego (opuściłem więzy integralności dla łatwiejszych modyfikacji). Wykonaj poniższe polecenia wykorzystując język PL/SQL w systemie Oracle (każda osoba, która zaprezentuje rozwiązanie +1 punkt z aktywności)
Napisz zapytanie, które zwróci wysokośc drzewa zależności
Napisz zapytanie, które zwróci wszystkich przełożonych nad osobą 'Gore'.
Napisz zapytanie, które zwróci wszystkich podwładnych osoby 'Celko'
Napisz zapytanie, te osoby które są najniżej w hierarchii, wraz z ich poziomem w tej hierarchii
Podaj jakie stopnie i ile jest osób dla danego stopnia, które znajdują się na 3 poziomie zagłębienia w drzewie hierarchii (1 = szef wszystkich szefów (reportsTo is NULL))