1. Napisz wyzwalacz, który będzie automatycznie przyznawał kolejne identyfikatory nowym zespołom. Przetestuj działanie wyzwalacza.
INSERT
INTO ZESPOLY(NAZWA) VALUES('KRYPTOGRAFIA');
1
wiersz został utworzony.
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
3. 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
4. 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