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