1. Napisz wyzwalacz, który będzie automatycznie przyznawał kolejne identyfikatory nowym zespołom. Przetestuj działanie wyzwalacza z poniższymi poleceniami.
INSERT INTO ZESPOLY(NAZWA) VALUES('KRYPTOGRAFIA');
1 wiersz został utworzony.
INSERT INTO ZESPOLY(NAZWA)
SELECT substr('NOWE '||NAZWA,1,20) FROM ZESPOLY
WHERE ID_ZESP in (10,20);
2 wiersze zostały utworzone.
2. Dodaj do relacji ZESPOLY atrybut LICZBA_PRACOWNIKOW. Napisz zlecenie SQL które zainicjuje początkowe wartości atrybutu. Napisz wyzwalacz, który będzie pielęgnował wartość tego atrybutu. Przetestuj działanie wyzwalacza.
ALTER TABLE ZESPOLY ADD (LICZBA_PRACOWNIKOW NUMBER);
UPDATE ZESPOLY Z
SET LICZBA_PRACOWNIKOW =
( SELECT COUNT(*) FROM PRACOWNICY WHERE ID_ZESP = Z.ID_ZESP );
SELECT * FROM zespoly;
ID_ZESP NAZWA ADRES LICZBA_PRACOWNIKOW
---------- -------------------- -------------------- ------------------
10 ADMINISTRACJA PIOTROWO 3A 2
20 SYSTEMY ROZPROSZONE PIOTROWO 3A 7
30 SYSTEMY EKSPERCKIE STRZELECKA 14 4
40 ALGORYTMY WLODKOWICA 16 1
50 BADANIA OPERACYJNE MIELZYNSKIEGO 30 0
INSERT INTO pracownicy(ID_PRAC,NAZWISKO,ID_ZESP,ID_SZEFA)
VALUES(300,'NOWY PRACOWNIK',40,120);
1 wiersz został utworzony.
SELECT * FROM zespoly;
ID_ZESP NAZWA ADRES LICZBA_PRACOWNIKOW
---------- -------------------- -------------------- ------------------
10 ADMINISTRACJA PIOTROWO 3A 2
20 SYSTEMY ROZPROSZONE PIOTROWO 3A 7
30 SYSTEMY EKSPERCKIE STRZELECKA 14 4
40 ALGORYTMY WLODKOWICA 16 2
UPDATE PRACOWNICY SET ID_ZESP = 10 WHERE ID_ZESP = 30;
4 wiersze zostały zmodyfikowane.
SELECT * FROM zespoly;
ID_ZESP NAZWA ADRES LICZBA_PRACOWNIKOW
---------- -------------------- -------------------- ------------------
10 ADMINISTRACJA PIOTROWO 3A 6
20 SYSTEMY ROZPROSZONE PIOTROWO 3A 7
30 SYSTEMY EKSPERCKIE STRZELECKA 14 0
40 ALGORYTMY WLODKOWICA 16 0
1. Stwórz relację HISTORIA o schemacie (ID_PRAC, PLACA_POD, ETAT, ZESPOL, MODYFIKACJA). Napisz wyzwalacz, który po każdej modyfikacji płacy podstawowej, etatu lub zespołu będzie wpisywał wartości historyczne do relacji HISTORIA.
CREATE TABLE HISTORIA (
ID_PRAC NUMBER,
PLACA_POD NUMBER,
ETAT VARCHAR2(20),
ZESPOL VARCHAR2(20),
MODYFIKACJA DATE);
UPDATE PRACOWNICY SET PLACA_POD = 800 WHERE NAZWISKO = 'KROLIKOWSKI';
DELETE FROM PRACOWNICY WHERE NAZWISKO = 'HAPKE';
SELECT * FROM HISTORIA;
ID_PRAC PLACA_POD ETAT ZESPOL MODYFIKACJ
---------- ---------- -------------------- -------------------- ----------
150 658,41 ADIUNKT SYSTEMY ROZPROSZONE 13-12-2001
230 480 ASYSTENT SYSTEMY EKSPERCKIE 13-12-2001
2. Utwórz perspektywę SZEFOWIE(SZEF, PRACOWNICY) zawierającą nazwisko szefa i liczbę jego podwładnych. Napisz procedurę wyzwalaną która umożliwi usuwanie szefów (wraz z kaskadowym usunięciem wszystkich podwładnych danego szefa) za pomocą powyższej perspektywy.
SELECT * FROM szefowie;
SZEF PRACOWNICY
--------------- ----------
BLAZEWICZ 1
BRZEZINSKI 5
MORZY 2
SLOWINSKI 2
WEGLARZ 3
SELECT * FROM pracownicy WHERE id_prac = 140 OR id_szefa = 140;
ID_PRAC NAZWISKO ETAT ID_SZEFA ZATRUDNI PLACA_POD PLACA_DOD ID_ZESP
---------- ----------- ---------- -------- -------- --------- ---------- -------
140 MORZY PROFESOR 130 75/09/15 830 105 20
190 MATYSIAK ASYSTENT 140 93/09/01 371 20
200 ZAKRZEWICZ STAZYSTA 140 94/07/15 208 30
DELETE FROM szefowie WHERE szef='MORZY';
SELECT * FROM pracownicy WHERE id_prac = 140 OR id_szefa = 140;
nie wybrano żadnych wierszy