Procedury i funkcje składowane - zadania

 

1.      Napisz procedurę PODWYZKA, która wszystkim pracownikom zespołu (parametr) podniesie płacę podstawową o podany procent (parametr). Domyślnie podwyżka powinna wynosić 15%.

 

SELECT NAZWISKO, PLACA_POD FROM PRACOWNICY WHERE ID_ZESP = 10;

 

NAZWISKO         PLACA_POD

--------------- ----------

WEGLARZ               1730

MAREK                410,2

 

EXECUTE PODWYZKA(10,10);

 

SELECT NAZWISKO, PLACA_POD FROM PRACOWNICY WHERE ID_ZESP = 10;

 

NAZWISKO         PLACA_POD

--------------- ----------

WEGLARZ               1903

MAREK               451,22

 

2.      Dodaj do powyższej procedury obsługę błędu – jeśli podano identyfikator nieistniejącego zespołu to procedura powinna zasygnalizować odpowiedni błąd.

 

EXEC PODWYZKA(100, 25);

 

BŁĄD w linii 1:

ORA-20001: Brak zespolu o podanym numerze

ORA-06512: at "MIKOLAJ.PODWYZKA", line 21

ORA-06512: at line 1

 

3.      Napisz procedurę LICZBA_PRACOWNIKOW, która dla podanej nazwy zespołu (parametr) zwróci liczbę pracowników zatrudnionych w tym zespole. Liczba pracowników powinna być zwrócona przez argument wyjściowy. Procedura powinna obsługiwać podanie nieprawidłowej nazwy zespołu.

 

VARIABLE v_pracownicy NUMBER

VARIABLE v_zespol VARCHAR2(20)

 

BEGIN

  :v_zespol := 'ADMINISTRACJA';

  LICZBA_PRACOWNIKOW(:v_zespol,:v_pracownicy);

END;

/

PRINT v_pracownicy

 

4.        Napisz procedurę NOWY_PRACOWNIK, która będzie służyła do wstawiania nowych pracowników. Procedura powinna przyjmować nazwisko nowego pracownika, nazwę zespołu, nazwisko jego szefa i wartość płacy podstawowej. Domyślną datą zatrudnienia jest bieżąca data, domyślnym etatem ‘STAŻYSTA’. Procedura powinna obsługiwać błędy podania błędnego zespołu i błędnego nazwiska szefa.

 

EXEC NOWY_PRACOWNIK('DYNDALSKI','ALGORYTMY','BLAZEWICZ',250);

 

SELECT * FROM PRACOWNICY WHERE NAZWISKO = 'DYNDALSKI';

 

ID_PRAC NAZWISKO     ETAT      ID_SZEFA ZATRUDNION  PLACA_POD ID_ZESP

------- ------------ ------------------ ---------- ---------- -------

    300 DYNDALSKI    STAZYSTA       110 13-12-2001        250      40

 

5.      Napisz funkcję PLACA_NETTO, która dla podanej płacy brutto (parametr) i podanej stawki podatku (parametr o wartości domyślnej 20%) wyliczy płacę netto.

 

SELECT NAZWISKO, PLACA_POD BRUTTO, PLACA_NETTO(PLACA_POD,35) NETTO

FROM PRACOWNICY

WHERE ETAT = 'PROFESOR';

 

NAZWISKO            BRUTTO      NETTO

--------------- ---------- ----------

BLAZEWICZ             1350      877,5

SLOWINSKI             1070      695,5

BRZEZINSKI           979,2     636,48

MORZY                846,6     550,29

 

6.      Napisz funkcję SILNIA, która dla danego n obliczy n! = 1 * 2 * ... * n (zastosuj iterację)

 

SELECT SILNIA(8) FROM DUAL;

 

SILNIA(8)

----------

     40320

 

7.      Napisz rekurencyjną wersję funkcji SILNIA

 

SELECT SILNIA(10) FROM DUAL;

 

SILNIA(10)

----------

   3628800

 

8.      Napisz funkcję, która dla daty zatrudnienia pracownika wylicza staż pracy w latach.

 

SELECT NAZWISKO, ZATRUDNIONY, STAZ(ZATRUDNIONY)

FROM PRACOWNICY WHERE PLACA_POD > 1000;

 

NAZWISKO        ZATRUDNION STAZ(ZATRUDNIONY)

--------------- ---------- -----------------

WEGLARZ         01-01-1968                34

BLAZEWICZ       01-05-1973                29

SLOWINSKI       01-09-1977                24