kolos3_zad1.txt

(2 KB) Pobierz
1. Do bazy danych zawierajšcej tabele: EMP, DEPT i SALGRADE dodaj dodatkowš tabelę o nazwie STATYSTYKA_PLATNOSCI_Sxxxx przeznaczonš do rejestracji informacji dotyczšcych grup zaszegregowania GRADE. Tabela powinna zawierac numer grupy, LOSAL, HISAL, liczbę osób należšcš do grupy w momencie wpisywania okrelonš w kolumnie "data ostaniej modyfikacji", maksymalnš i minimalnę pensje podstawowš rzeczywicie osišgalnš rzeczywicie osišganš przez pracowników tej grupy na przestrzeni całej historii oraz datę ostaniej modyfikacji tych informacji (sysdate)

 2. Utwórz procedurę która wypełni tabelę STATYSTYKA_PLATNOSCI_Sxxxx poczštkowymi danymi z tebel EMP, DEPT i SALGRADE dodatkowo wypisujšc komunikaty o każdym wystawianym do tabeli wierszu.

 3. Napisz wyzwalacz poprawiajšcy tabelę STATYSTYKA_PLATNOSCI_Sxxxx gdy w tabel EMP nastšpiš zmiany majšce wpływ na statystyke płatnoci (zakładamy, że tabela SALGRADE się nie zmienia)


ROZWIĽZANIE:
//zadanie1
CREATE TABLE STATYSTYKA_STANOWISK_Sxxxx(
STANOWISKO VARCHAR2(25) null,
PENSJA NUMBER(10,0) not null,
DATA date null,
constraint STATYSTYKA_STANOWISK_Sxxxx_PK primary key (STANOWISKO) ); 

//zadanie 2
SET SERVEROUTPUT ON
create or replace procedure WYPELNIJ_STANOWISKA
as
cursor PRACOWNICY is
	SELECT SUM(SAL) sal,JOB FROM EMP GROUP BY JOB;
PRACOWNIK PRACOWNICY%rowtype;
begin 
open PRACOWNICY;
LOOP
FETCH PRACOWNICY INTO PRACOWNIK;
EXIT WHEN PRACOWNICY%NOTFOUND;
INSERT INTO STATYSTYKA_STANOWISK_Sxxxx
(stanowisko,pensja,data)
VALUES 
(pracownik.job, pracownik.sal,sysdate);
dbms_output.put_line('Dodane stanowisko: '||pracownik.job||' wynagrodzenie: '||pracownik.sal||' data '||sysdate);
END LOOP;
end;

Dodane stanowisko: CLERK wynagrodzenie: 6150 data 12/01/20
Dodane stanowisko: SALESMAN wynagrodzenie: 13600 data 12/01/20
Dodane stanowisko: PRESIDENT wynagrodzenie: 5000 data 12/01/20
Dodane stanowisko: MANAGER wynagrodzenie: 10275 data 12/01/20
Dodane stanowisko: ANALYST wynagrodzenie: 6000 data 12/01/20
PL/SQL procedure successfully completed.

//zadanie 3
CREATE OR REPLACE TRIGGER SPRAWDZ_STATYSTYKE
BEFORE UPDATE OF SAL
ON EMP
FOR EACH ROW
BEGIN
UPDATE STATYSTYKA_STANOWISK_Sxxxx SET PENSJA=PENSJA+(:NEW.SAL-:OLD.SAL) WHERE stanowisko=:NEW.JOB;
end;

SELECT ENAME,JOB,SAL FROM EMP WHERE EMPNO=7369;
SELECT * FROM STATYSTYKA_STANOWISK_Sxxxx WHERE STANOWISKO='CLERK';
UPDATE EMP SET SAL=900 WHERE  EMPNO=7369;
SELECT ENAME,JOB,SAL FROM EMP WHERE EMPNO=7369;
SELECT * FROM STATYSTYKA_STANOWISK_Sxxxx WHERE STANOWISKO='CLERK';

ENAME 	JOB 	SAL
SMITH 	CLERK 	800

STANOWISKO 	PENSJA 	DATA
CLERK 	6150 	12/01/20

1 row updated.

ENAME 	JOB 	SAL
SMITH 	CLERK 	900

STANOWISKO 	PENSJA 	DATA
CLERK 	6250 	12/01/20
Zgłoś jeśli naruszono regulamin