Вы находитесь на странице: 1из 4

-----------------------------------------------

EJERCICIOS - SEMANA 2
------------------------------------------------

REQUERIMIENTO 1------------------------------------------
CREATE OR REPLACE FUNCTION SP_DEP_EMP (P_ID EMPLEADO.EMPLOYEE_ID
%TYPE)
RETURN DEPARTMENTS.DEPARTMENT_NAME%TYPE
IS
P_NAME DEPARTMENTS.DEPARTMENT_NAME%TYPE;
BEGIN
SELECT NVL(DEPARTMENT_NAME,'SIN DEPARTAMENTO') INTO P_NAME
FROM EMPLEADO EMP
LEFT JOIN DEPARTMENTS DEPA ON
(EMP.DEPARTMENT_ID=DEPA.DEPARTMENT_ID)
WHERE EMPLOYEE_ID=P_ID;
RETURN P_NAME;
END SP_DEP_EMP;

SELECT FIRST_NAME, LAST_NAME, SP_DEP_EMP(EMPLOYEE_ID) FROM EMPLEADO

REQUERIMIENTO 2------------------------------------------
ALTER TABLE EMPLOYEES_UNO ADD DESCUENTO_EMP NUMBER;
ALTER TABLE EMPLOYEES_UNO
DROP COLUMN DESCUENTO_EMP;
SELECT * FROM EMPLOYEES_UNO;
CREATE TABLE EMPLOYEES_UNO AS SELECT * FROM EMPLOYEES;
UPDATE EMPLOYEES SET DESCUENTO_EMP = 2 WHERE EMPLOYEE_ID=100;
CREATE OR REPLACE PROCEDURE SP_CAL_DESCUENTO (P_PCJ number)
IS
CURSOR CUR_EMPLOYEES IS SELECT * FROM EMPLOYEES;
V_CUR_EMPLOYEES EMPLOYEES%ROWTYPE;
BEGIN
OPEN CUR_EMPLOYEES;
LOOP
FETCH CUR_EMPLOYEES INTO V_CUR_EMPLOYEES;
EXIT WHEN CUR_EMPLOYEES%NOTFOUND;
CASE
WHEN V_CUR_EMPLOYEES.COMMISSION_PCT is null THEN
UPDATE EMPLOYEES_UNO SET DESCUENTO_EMP =
( V_CUR_EMPLOYEES.SALARY * ((V_CUR_EMPLOYEES.SALARY*P_PCJ)/100) )
WHERE EMPLOYEE_ID = V_CUR_EMPLOYEES.EMPLOYEE_ID;
WHEN not( V_CUR_EMPLOYEES.COMMISSION_PCT is null) THEN
UPDATE EMPLOYEES_UNO SET DESCUENTO_EMP = 0
WHERE EMPLOYEE_ID = V_CUR_EMPLOYEES.EMPLOYEE_ID;
ELSE CONTINUE;
END CASE;
END LOOP;
CLOSE CUR_EMPLOYEES;
END SP_CAL_DESCUENTO;
--EJECUCIÓN
EXECUTE SP_CAL_DESCUENTO(3);

REQUERIMIENTO 3------------------------------------------
CREATE TABLE EMPLOYES_copia AS
SELECT * FROM EMPLOYEES;

ALTER TABLE EMPLOYES_copia


DROP COLUMN DESCUENTO_EMP2;

ALTER TABLE EMPLOYES_copia ADD DESCUENTO_EMP number;

CREATE OR REPLACE PROCEDURE SP_ACT_DESCUENTO (P_MONTO


EMPLOYES_copia.salary%TYPE)
IS
BEGIN
FOR employ IN (SELECT * FROM EMPLOYES_copia)
LOOP
IF EMPLOY.SALARY>P_MONTO THEN
UPDATE EMPLOYES_copia SET DESCUENTO_EMP = salary *0.2 where
employee_id = employ.employee_id;
END IF;
DBMS_OUTPUT.PUT_LINE(employ.first_name ||' '||employ.salary||' '||
employ.DESCUENTO_EMP);
END LOOP;
END SP_ACT_DESCUENTO;
--EJECUCIÓN
EXECUTE SP_ACT_DESCUENTO(3600);

REQUERIMIENTO 4------------------------------------------
DECLARE
TYPE CUR_VAR IS REF CURSOR;
VI CUR_VAR;
V_DEPART departments%ROWTYPE;
V_JOB JOBS%ROWTYPE;
V_VAR CHAR(1):='D';--
BEGIN
IF V_VAR='D' THEN
OPEN VI FOR SELECT * FROM departments;
LOOP
FETCH VI INTO V_DEPART;
EXIT WHEN VI%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_DEPART.department_id || ' '||
V_DEPART.department_name|| ' '||V_DEPART.MANAGER_ID|| ' '||
V_DEPART.LOCATION_ID);
END LOOP;
DBMS_OUTPUT.PUT_LINE('entro--------------' || VI%rowcount);
ELSE
OPEN VI FOR SELECT * FROM JOBS;
LOOP
FETCH VI INTO V_JOB;
EXIT WHEN VI%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(V_JOB.JOB_ID||' '||V_JOB.JOB_TITLE|| ' '||
V_JOB.MIN_SALARY || ' '||V_JOB.MAX_SALARY);
END LOOP;
DBMS_OUTPUT.PUT_LINE('entro--------------' || VI%rowcount);
END IF;
CLOSE VI;
END;

REQUERIMIENTO 5------------------------------------------
CREATE TABLE JOB_SAL (
EMP_ID NUMBER(4,0),
TRABAJO_SALARIO VARCHAR(150)
);

SELECT * FROM JOB_SAL;


SELECT * FROM JOBS;
SELECT * FROM EMPLOYEES;
CREATE OR REPLACE PROCEDURE SP_JOB_SALARY
IS
V_TRABAJO_SALARIO JOB_SAL.TRABAJO_SALARIO%TYPE;
BEGIN
FOR R IN (SELECT E.EMPLOYEE_ID, J.JOB_TITLE, E.SALARY FROM EMPLOYEES E
JOIN JOBS J ON E.JOB_ID=J.JOB_ID where rownum <= 6)
LOOP
V_TRABAJO_SALARIO := 'Su trabajo es: '||R.JOB_TITLE||' Su salario es: '||
R.SALARY;
INSERT INTO JOB_SAL VALUES (R.EMPLOYEE_ID, V_TRABAJO_SALARIO);
END LOOP;
END SP_JOB_SALARY;
--EJECUCIÓN
EXECUTE SP_JOB_SALARY;

REQUERIMIENTO 6------------------------------------------
CREATE TABLE EMPLEADO (
ID NUMBER(6,0),
NOMBRE VARCHAR(20)
);
SELECT * FROM EMPLEADO;
SELECT * FROM EMPLOYEES;
CREATE OR REPLACE PROCEDURE SP_NUEVA_LIST_EMP
IS
BEGIN
FOR R IN (SELECT * FROM EMPLOYEES where rownum <= 5)
LOOP
INSERT INTO EMPLEADO VALUES (R.EMPLOYEE_ID, R.FIRST_NAME);
END LOOP;
END SP_NUEVA_LIST_EMP;
--EJECUCIÓN
EXECUTE SP_NUEVA_LIST_EMP;
----------------------------------------------------------------------------------------------------

-----------------------------------------------------
ADICIONAL:

CREATE OR REPLACE PROCEDURE SP_NUEVA_LIST_EMP


IS
BEGIN
FOR R IN 1..6 -- RECORRE A 6 EMPLEADOS
LOOP
INSERT INTO EMPLEADO(EMPLEADO_ID, NOMBRE)
VALUES (R+1,'JUAN');
COMMIT;
END LOOP;
END SP_NUEVA_LIST_EMP;
--EJECUCIÓN

EXECUTE SP_NUEVA_LIST_EMP;

--------------------------------------------------------------------------

Вам также может понравиться