You are on page 1of 4

1.

SELECT FIRST_NAME||' '||LAST_NAME AS EMPNAME,SALARY AS MONTHLY_PAY,SALARY*12 AS


ANNUAL_PAY,DEPARTMENT_NAME AS DNAME
FROM DEPARTMENTS,EMPLOYEES
WHERE DEPARTMENTS.DEPARTMENT_ID=EMPLOYEES.DEPARTMENT_ID
ORDER BY SALARY DESC;
2.
SELECT FIRST_NAME||' '||LAST_NAME AS EMPNAME,SALARY*NVL(COMMISSION_PCT,0)/100+SA
LARY AS MONTHLY_PAY,
(SALARY*NVL(COMMISSION_PCT,0)/100+SALARY)*12 AS ANNUAL_PAY,DEPARTMENT_NAME AS DN
AME
FROM DEPARTMENTS,EMPLOYEES
WHERE DEPARTMENTS.DEPARTMENT_ID=EMPLOYEES.DEPARTMENT_ID
ORDER BY SALARY DESC;
3.
SELECT FIRST_NAME||' '||LAST_NAME AS EMPNAME,TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(HIR
E_DATE,'YYYY') AS EXPERIENCE_YRS
FROM EMPLOYEES
ORDER BY EXPERIENCE_YRS DESC;
4.
SELECT EMPLOYEE_ID ,FIRST_NAME||' '||LAST_NAME AS EMPNAME , SALARY AS OLD_SALARY
,(SALARY*1.1) AS NEW_SALARY,DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID=90;
5.
SELECT DEPARTMENT_ID,DEPARTMENT_NAME,TOTAL_SALARY
FROM (SELECT E.DEPARTMENT_ID AS DEPT_ID,SUM(SALARY) AS TOTAL_SALARY
FROM EMPLOYEES E
GROUP BY E.DEPARTMENT_ID
HAVING SUM(SALARY)>100000),DEPARTMENTS
WHERE DEPARTMENTS.DEPARTMENT_ID=DEPT_ID ;
6.
CREATE OR REPLACE VIEW MAXMIN AS
SELECT E.FIRST_NAME,E.JOB_ID
FROM EMPLOYEES E
WHERE (E.SALARY=(SELECT MIN(SALARY) FROM EMPLOYEES E1 WHERE E1.JOB_ID=E.JOB_ID))
OR
(E.SALARY=(SELECT MAX(SALARY) FROM EMPLOYEES E1 WHERE E1.JOB_ID=E.JOB_ID));

7.
CREATE VIEW LOCATDEP AS
SELECT EMPLOYEE_ID,D.DEPARTMENT_NAME,CITY,COUNTRY_NAME
FROM EMPLOYEES E,DEPARTMENTS D,LOCATIONS L,COUNTRIES C
WHERE E.DEPARTMENT_ID=D.DEPARTMENT_ID AND D.LOCATION_ID=L.LOCATION_ID AND L.COUN
TRY_ID=C.COUNTRY_ID;
8.
SELECT DEPARTMENT_ID,TO_CHAR(HIRE_DATE,'YYYY') AS YEAR,COUNT(*)
FROM EMPLOYEES
GROUP BY DEPARTMENT_ID,TO_CHAR(HIRE_DATE,'YYYY')
ORDER BY DEPARTMENT_ID,YEAR;

9.
SELECT E.EMPLOYEE_ID AS EMPID,E.FIRST_NAME AS ENAME,E1.HIRE_DATE AS MAN_JOIN,E.H
IRE_DATE AS EMP_JOIN
FROM EMPLOYEES E,EMPLOYEES E1
WHERE E.MANAGER_ID=E1.EMPLOYEE_ID AND E1.HIRE_DATE>E.HIRE_DATE;
10
SELECT CNAME,LNAME,COUNT(*) AS NO
FROM ( SELECT C.COUNTRY_NAME AS CNAME,L.CITY AS LNAME
FROM COUNTRIES C, LOCATIONS L,DEPARTMENTS D
WHERE D.LOCATION_ID=L.LOCATION_ID AND L.COUNTRY_ID=C.COUNTRY_ID AND
D.DEPARTMENT_ID IN (SELECT E1.DEPARTMENT_ID FROM EMPLOYEES E1 GROUP BY E1.DEPART
MENT_ID HAVING COUNT(*)>5 ))
GROUP BY CNAME,LNAME;
11.
SELECT E.FIRST_NAME,E.SALARY
FROM EMPLOYEES E
WHERE (SELECT COUNT(*) FROM EMPLOYEES E1 WHERE E1.MANAGER_ID=E.EMPLOYEE_ID)>5;
12.
Write a pl/sql code to update the salary of a given employee no on the f
ollowing condition.
Experience of the employee
increase in salary
More than 10 years----------------------20%
More than 5 years------------------------10%
Otherwise----------------------------------5%
CREATE OR REPLACE PROCEDURE UDPATESALARY(EMPNO INT) IS
BEGIN
UPDATE EMPLOYEES SET SALARY=SALARY*1.2 WHERE TO_CHAR(SYSDATE,'YYYY')-TO_
CHAR(HIRE_DATE,'YYYY')>10 AND EMPLOYEE_ID=EMPNO;
UPDATE EMPLOYEES SET SALARY=SALARY*1.1 WHERE TO_CHAR(SYSDATE,'YYYY')-TO_
CHAR(HIRE_DATE,'YYYY')>5 AND TO_CHAR(SYSDATE,'YYYY')-TO_CHAR(HIRE_DATE,'YYYY')<=
10 AND EMPLOYEE_ID=EMPNO;
UPDATE EMPLOYEES SET SALARY=SALARY*1.05 WHERE TO_CHAR(SYSDATE,'YYYY')-TO
_CHAR(HIRE_DATE,'YYYY')<5 AND EMPLOYEE_ID=EMPNO;
END;
13.
SELECT YEAR
FROM(
SELECT TO_CHAR(HIRE_DATE,'YYYY') AS YEAR,COUNT(*)
FROM EMPLOYEES
GROUP BY TO_CHAR(HIRE_DATE,'YYYY')
ORDER BY COUNT(*) DESC)
WHERE ROWNUM=1;
14.
14.
Change salary of employee 130 to salary of the employee with first name joe . I
f joe
is not found then take average salary of all employees. If more than one employe
e with first name joe
is found, then take the least salary of them and set the salary
of employee 130.
CREATE OR REPLACE PROCEDURE CHANGESAL IS

SAL NUMBER;
BEGIN
SELECT SALARY INTO SAL FROM (SELECT SALARY FROM EMPLOYEES WHERE FIRST_NA
ME='Joe' ORDER BY SALARY )
WHERE ROWNUM=1;
IF(SAL IS NULL) THEN
SELECT AVG(SALARY) INTO SAL FROM EMPLOYEES ;
UPDATE EMPLOYEES SET SALARY=SAL WHERE EMPLOYEE_ID=130;
ELSE
UPDATE EMPLOYEES SET SALARY=SAL WHERE EMPLOYEE_ID=130;
END IF;
END;
15.
CREATE OR REPLACE PROCEDURE CURS IS
CURSOR EMP IS
SELECT EMPLOYEE_ID,FIRST_NAME,SALARY
FROM EMPLOYEES;
EMPID INT;
NAME VARCHAR2(40);
SAL INT;
COUT INT;
BEGIN
COUT :=0;
OPEN EMP;
LOOP
FETCH EMP INTO EMPID,NAME,SAL;
EXIT WHEN EMP%NOTFOUND;
COUT:=COUT+1;
IF (COUT=5 OR COUT=10) THEN
DBMS_OUTPUT.PUT_LINE(EMPID||' '||NAME||' '||SAL);
END IF;
END LOOP;
CLOSE EMP;
END;
16.

Update salary of an employee based on Dept_id and commission percentage.


Dept_id
Increase
40 ---------- 10%
70 ---------- 15%

If commission > .3 then increase is 5%; otherwise, increase is 10%.


Note: No hikes twice.
CREATE OR REPLACE INCSALARY IS
BEGIN
UPDATE EMPLOYEES SET SALARY=SALARY*1.1 WHERE DEPARTMENT_ID=40;
UPDATE EMPLOYEES SET SALARY=SALARY*1.15 WHERE DEPARTMENT_ID=70;
UPDATE EMPLOYEES SET SALARY=SALARY*1.05 WHERE DEPARTMENT_ID<>70 AND DEPA
RTMENT_ID<>40 AND COMMISSION_PCT>0.3;
UPDATE EMPLOYEES SET SALARY=SALARY*1.1 WHERE DEPARTMENT_ID<>70 AND DEPAR
TMENT_ID<>40 AND COMMISSION_PCT<0.3;
END
17.

17. Create a function that takes Dept_id and returns name of the manager.
CREATE OR REPLACE FUNCTION MAN_NAME (DEPTNO IN INT, NAME OUT VARCHAR2) RETURN VA
RCHAR IS
BEGIN
SELECT E.FIRST_NAME INTO NAME FROM EMPLOYEES E,DEPARTMENTS D WHERE D.MAN
AGER_ID =E.EMPLOYEE_ID ;
END;
18. Create a procedure that takes the Dept_id and change the manager_id of the d
ept to employee in the dept with highest salary.
CREATE OR REPLACE PROCEDURE MANCHNG(DNO INT) IS
TEMP INT;
BEGIN
SELECT E.EMPLOYEE_ID INTO TEMP FROM EMPLOYEES E WHERE (SELECT COUNT (*)
FROM EMPLOYEES E1 WHERE E.SALARY>E1.SALARY) = 0;
UPDATE EMPLOYEES SET MANAGER_ID=TEMP WHERE DEPARTMENT_ID=DNO;
END;
19
CREATE OR REPLACE TRIGGER CHECK_SAL BEFORE UPDATE ON EMPLOYEES FOR EACH ROW
DECLARE
SAL INT;
BEGIN
IF ( :NEW.SALARY < :OLD.SALARY) THEN
RAISE_APPLICATION_ERROR(-20002,'CAN NOT DECREASE SALARY');
ELSE
DBMS_OUTPUT.PUT_LINE('SUCCESFULL UPDATE');
END IF;
END;
20.
Write
d in employee
constraint of
xception with

a trigger to check whether the salary of an employee to be inserte


table doesn t violate the min-max salary
the corresponding job ID. If it violates the constraint raise an e
some message.

CREATE OR REPLACE TRIGGER CHECK_SAL_MIN BEFORE INSERT ON EMPLOYEES FOR EACH ROW
DECLARE
MINI INT;
MAXI INT;
BEGIN
SELECT MIN_SALARY INTO MINI FROM JOBS J WHERE J.JOB_ID=:NEW.JOB_ID;
SELECT MAX_SALARY INTO MAXI FROM JOBS J WHERE J.JOB_ID=:NEW.JOB_ID;
IF ( :NEW.SALARY>MAXI ) THEN
RAISE_APPLICATION_ERROR(-20002,' SALARY NOT BETWEEN MIN MAX');
ELSIF ( :NEW.SALARY < MINI ) THEN
RAISE_APPLICATION_ERROR(-20002,' SALARY NOT BETWEEN MIN MAX');
ELSE
DBMS_OUTPUT.PUT_LINE('SUCCESFULL INSERT');
END IF;
END;

You might also like