Wyzwalacze bazy danych                 

 

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