You are on page 1of 2

A HRD manager has decided to raise the salary for all the employees in department number 10 by 0.

05,
department number 20 by 0.08, department number 30 by 0.1 and other department by 03. Whenever any
such raise is given to employees an audit trail of the same is maintained in the EMP RAISE table. The EMP
RAISE table holds the employee number, the date when the raise was given and the raise amount.
Write a PL/SQL block to update the salary of each employee appropriately and insert a record in the EMP RAISE table
as well

Tables are as follows:

EMP_RAISE(EMP_CODE, RAISE AMOUNT, RAISE_DATE)

CREATE EMP_RAISE TABLE

SQL> CREATE TABLE EMP_RAISE (EMP_CODE NUMBER(2), RAISE_AMOUNT NUMBER(5), RAISE_DATE DATE);

Table created.
0.19 seconds

DECLARE

CURSOR CUR IS
SELECT ENO,SALARY,DNO FROM Employee;

C CUR%ROWTYPE;
INC Employee.SALARY%TYPE;

BEGIN
OPEN CUR;

LOOP
FETCH CUR INTO C;
EXIT WHEN CUR%NOTFOUND;

IF C.DNO=10 THEN
INC := C.SALARY*0.05;
INSERT INTO EMP_RAISE VALUES (C.ENO, INC, SYSDATE);
UPDATE Employee SET SALARY=C.SALARY+INC WHERE ENO=C.ENO;
ELSIF C.DNO=20 THEN
INC:=C.SALARY*0.08;
INSERT INTO EMP_RAISE VALUES (C.ENO, INC, SYSDATE);
UPDATE Employee SET SALARY=C.SALARY+INC WHERE ENO=C.ENO;
ELSIF C.DNO=30 THEN
INC:= C.SALARY*0.1;
INSERT INTO EMP_RAISE VALUES (C.ENO, INC, SYSDATE);
UPDATE Employee SET SALARY=C.SALARY+INC WHERE ENO=C.ENO;
END IF;
END LOOP;
CLOSE CUR;

END;
/

SQL> SELECT * FROM Employee;

ENO ENAME DNO SALARY MANAGER_NO


---------- ---------- ---------- ---------- ----------
1 Amal 10 31500
2 Shyamal 30 55000 1
3 Kamal 40 10000 4
4 Nirmal 50 60000 5
5 Bimal 20 43200 2
6 Parimal 20 21600 1

6 rows selected.

SQL> SELECT * FROM EMP_RAISE;

EMP_CODE RAISE_AMOUNT RAISE_DAT


---------- ------------ ---------
1 1500 12-JUN-21
2 5000 12-JUN-21
5 3200 12-JUN-21
6 1600 12-JUN-21

You might also like