Bazy Danych 2 – Laboratorium |
---|
Laboratorium nr.2 |
Zad 2.1
-----zad 1
CREATE OR REPLACE PROCEDURE adds(x VARCHAR2, y NUMBER, z NUMBER)
IS
v stanowiska.id_st%TYPE;
BEGIN
SELECT Max(id_st) INTO v FROM stanowiska;
v:=v+1;
INSERT INTO stanowiska(id_st, Nazwa_st, Min_placa) VALUES(v, x, y);
END;
/
EXECUTE adds('Konstruktor',1100,1400);
SELECT * FROM stanowiska;
Wyniki:
Zad 2.2
-----zad 2
CREATE OR REPLACE PROCEDURE addPerson(imie VARCHAR2, nazwisko VARCHAR2, dateOfBirth VARCHAR2, i VARCHAR2)
IS
numer osoby.id_os%TYPE;
BEGIN
SELECT Max(id_os) INTO numer FROM osoby;
numer:=numer+1;
INSERT INTO Osoby(id_os,Imie,Nazwisko,Data_ur,plec) VALUES(numer, imie, nazwisko, to_Date(dateOfBirth,'YYYY-MM-DD'),i );
END;
/
EXECUTE addPerson('Ferdynand','Kiepski','1962-05-11','M');
SELECT * FROM osoby;
Wynik:
Zad 2.3
CREATE OR REPLACE FUNCTION manager(id NUMBER)
RETURN VARCHAR2
IS
wzor LONG;
numer NUMBER;
CURSOR cursor01 IS SELECT * FROM osoby;
BEGIN
FOR i IN cursor01
LOOP
IF (i.id_os=id AND i.id_kierownika IS NOT NULL ) THEN
numer:=i.id_kierownika;
ELSE
wzor:='Nie ma osoby';
END IF;
END LOOP;
FOR j IN cursor01
LOOP
IF (j.id_os=numer) THEN
wzor:=j.imie||' '||j.nazwisko;
END IF;
END LOOP;
RETURN wzor;
END;
/
SELECT manager(1) FROM dual;
Wynik:
Zad 2.4
-----zad 4
CREATE OR REPLACE FUNCTION p1(id NUMBER)
RETURN NUMBER
IS
numer01 NUMBER;
numer02 NUMBER;
CURSOR cursor01 IS SELECT p.podstawa, p.premia, o.imie, o.nazwisko, p.id_os FROM osoby o, place p;
BEGIN
FOR i IN cursor01
LOOP
IF (i.id_os=id) THEN
numer01:=12*(i.podstawa+i.premia);
IF (numer01>85000) THEN
numer02:=0.4*numer01;
ELSIF (numer01>=50000 AND numer01<46000) THEN
numer02:=0.30*numer01;
ELSIF (numer01>3500 AND numer01<50000) THEN
numer02:=0.19*numer01;
ELSIF (numer01<=3500) THEN
numer02:=0;
END IF;
END IF;
END LOOP;
RETURN numer02;
END;
/
SELECT p1(2) FROM dual;
Wynik:
Zad 2.5
-----zad 5
CREATE OR REPLACE PROCEDURE report(year0 NUMBER)
IS
CURSOR cursor01 IS SELECT e.data_zat, e.id_os, o.imie, o.nazwisko FROM etaty e, osoby o
WHERE e.id_os=o.id_os;
numer NUMBER;
BEGIN
FOR i IN cursor01
LOOP
numer:=to_char(i.data_zat, 'YYYY');
IF (year0=numer) THEN
DBMS_OUTPUT.put_line ('pracownik '||i.id_os||' '||i.imie||' '||i.nazwisko);
END IF;
END LOOP;
END;
/
SET SERVEROUTPUT ON;
EXECUTE report(2006);
Wynik:
Zad 2.6
-----zad 6
CREATE OR REPLACE PROCEDURE position(s VARCHAR2)
IS
CURSOR cursor01 IS SELECT s.nazwa_st, e.data_zat, o.imie, o.nazwisko FROM etaty e, osoby o, stanowiska s
WHERE s.id_st=e.id_st AND e.id_os=o.id_os;
numer NUMBER;
BEGIN
FOR i IN cursor01
LOOP
IF (s=i.nazwa_st AND to_char(i.data_zat, 'YYYY')=2006) THEN
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.put_line ('pracownik '||i.imie||' '||i.nazwisko);
END IF;
END LOOP;
END;
/
SET SERVEROUTPUT ON;
EXECUTE position('Informatyk');
Zad 2.7
-----zad 7
CREATE OR REPLACE PROCEDURE report0
IS
CURSOR cursor01 IS SELECT s.nazwa_st, e.data_zat, o.imie, o.nazwisko, o.data_ur, p.data, p.podstawa, p.premia FROM etaty e, osoby o, stanowiska s, place p
WHERE s.id_st=e.id_st AND e.id_os=o.id_os AND p.id_os=o.id_os;
numer NUMBER;
SumYear NUMBER;
SumFull NUMBER;
BEGIN
DBMS_OUTPUT.ENABLE;
FOR i IN cursor01
LOOP
numer:=i.premia+i.podstawa;
SumYear:=numer*12;
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.put_line ('Raport plac z dnia: '||SYSDATE);
Dbms_Output.put_line('-----------------------------------------------------------------');
Dbms_Output.put_line('Imie Nazwisko Data Urodzenia');
Dbms_Output.put_line( i.imie||' '||i.nazwisko||' '||i.data_ur );
DBMS_OUTPUT.put_line('Place za rok 2010');
DBMS_OUTPUT.put_line('Data Podstawa Premia Razem');
DBMS_OUTPUT.put_line(i.data||' '||i.podstawa||' '||i.premia||' '||numer);
DBMS_OUTPUT.put_line('Suma za rok 2005:'||SumYear);
DBMS_OUTPUT.put_line('Suma za wszystkie lata: '||SumFull);
Dbms_Output.put_line('-----------------------------------------------------------------');
Dbms_Output.put_line('Imie Nazwisko Data Urodzenia');
Dbms_Output.put_line('');
Dbms_Output.put_line('');
END LOOP;
END;
/
SET SERVEROUTPUT ON;
EXEC report0;
Wynik:
PROCEDURE report0 compiled
anonymous block completed
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Jan Kowalski 52/05/22
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 3600 1200,5 4800,5
Suma za rok 2005:57606
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Jan Kowalski 52/05/22
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 3600 1200,5 4800,5
Suma za rok 2005:57606
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Jan Kowalski 52/05/22
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 3500 1000 4500
Suma za rok 2005:54000
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Jan Kowalski 52/05/22
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 3500 1000 4500
Suma za rok 2005:54000
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Jan Kowalski 52/05/22
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 3500 800 4300
Suma za rok 2005:51600
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Jan Kowalski 52/05/22
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 3500 800 4300
Suma za rok 2005:51600
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Piotr Nowak 62/03/02
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2500
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Piotr Nowak 62/03/02
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2400 450 2850
Suma za rok 2005:34200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Piotr Nowak 62/03/02
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2400 500 2900
Suma za rok 2005:34800
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2100 500 2600
Suma za rok 2005:31200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2100 500 2600
Suma za rok 2005:31200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2100 500 2600
Suma za rok 2005:31200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2100
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2100
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2100
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2100 300 2400
Suma za rok 2005:28800
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2100 300 2400
Suma za rok 2005:28800
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Anna Kruk 74/02/14
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2100 300 2400
Suma za rok 2005:28800
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Maria Nowak 69/11/17
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 1800 300 2100
Suma za rok 2005:25200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Maria Nowak 69/11/17
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 1800 250 2050
Suma za rok 2005:24600
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Maria Nowak 69/11/17
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 1800
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2050 150 2200
Suma za rok 2005:26400
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2050 150 2200
Suma za rok 2005:26400
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/05/10 2050 150 2200
Suma za rok 2005:26400
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2000
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2000
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/06/10 2000
Suma za rok 2005:
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2000 350 2350
Suma za rok 2005:28200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2000 350 2350
Suma za rok 2005:28200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Raport plac z dnia: 12/03/12
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Ewa Wrona 63/12/10
Place za rok 2010
Data Podstawa Premia Razem
06/07/10 2000 350 2350
Suma za rok 2005:28200
Suma za wszystkie lata:
-----------------------------------------------------------------
Imie Nazwisko Data Urodzenia
Zad 2.8
-----zad 8
CREATE OR REPLACE PROCEDURE proc(imie0 VARCHAR2, nazwisko0 VARCHAR2)
IS
numer NUMBER;
CURSOR cursor01 IS SELECT * FROM osoby;
BEGIN
FOR i IN cursor01
LOOP
IF (i.imie=imie0 AND i.nazwisko=nazwisko0 AND i.id_kierownika IS NULL ) THEN
numer:=i.id_os;
END IF;
END LOOP;
DBMS_OUTPUT.put_line ('Sklad: '||imie0||' '||nazwisko0);
FOR j IN cursor01
LOOP
IF (j.id_kierownika=numer) THEN
DBMS_OUTPUT.put_line (j.imie||' '||j.nazwisko);
END IF;
END LOOP;
END;
/
SET SERVEROUTPUT ON;
EXEC proc('Jan','Kowalski');
Wyniki:
Zad 2.10
-----zad 10
CREATE OR REPLACE PROCEDURE procedura_zad10(s VARCHAR2)
IS
CURSOR cursor01 IS SELECT o.imie, o.nazwisko, e.data_zat, o.id_os FROM osoby o, etaty e, stanowiska s WHERE e.id_os=o.id_os AND s.id_st=e.id_st AND s.nazwa_st=s ORDER BY o.imie;
x NUMBER;
y NUMBER;
z NUMBER;
BEGIN
FOR i IN cursor01
LOOP
SELECT Sum(podstawa) INTO x FROM place WHERE id_os=i.id_os;
SELECT Sum(premia) INTO y FROM place WHERE id_os=i.id_os;
z:=x+y;
DBMS_OUTPUT.ENABLE;
DBMS_OUTPUT.put_line ('Pracownicy: ');
DBMS_OUTPUT.put_line (i.imie||' '||i.nazwisko);
DBMS_OUTPUT.put_line ('Data zatrudnienia: '||i.data_zat);
DBMS_OUTPUT.put_line ('Zarobki:'||z);
END LOOP;
END;
/
SET SERVEROUTPUT ON;
EXEC procedura_zad10('&s');