Professional Documents
Culture Documents
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.
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
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;