Академический Документы
Профессиональный Документы
Культура Документы
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;
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;
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)
);
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:
EXECUTE SP_NUEVA_LIST_EMP;
--------------------------------------------------------------------------