You are on page 1of 4

/*CASOS PROPUESTOS*/

/*PREGUNTA 1

En un bloque PL/SQL, realice la bsqueda simple por cdigo de departamento (Utilizar &) y muestre sus datos. En caso
no existiese, usando excepciones enve un mensaje 'CODIGO DE DEPARTAMENTO NO EXISTE' mediante el gestor
NO_DATA_FOUND.*/

SET SERVEROUTPUT ON;

declare

xdeptno dept.deptno%TYPE;

xdname dept.dname%TYPE;

xloc dept.loc%TYPE;

BEGIN

xdeptno:=60;

SELECT deptno ,dname ,loc

INTO xdeptno,xdname,xloc

from dept where deptno=xdeptno;

DBMS_OUTPUT.PUT_LINE('Codigo:'||xdeptno);

DBMS_OUTPUT.PUT_LINE('Nombre:'||xdname);

DBMS_OUTPUT.PUT_LINE('Locacion:'||xloc);

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('Codigo del departamento No Existe!!!');

END;

SELECT * FROM DEPT;

/*PREGUNTA 2

En un bloque PL/SQL, realice una insercin de registros a la tabla empleado. Usando excepciones predefinidas enve los
siguentes mensajes

'YA EXISTE UN EMPLEADO CON EL CODIGO INGRESADO' o 'ERROR DESCONOCIDO'.


Utilice los gestores DUP_VAL_ON_INDEX y OTHERS.*/

SET serveroutput ON;

DECLARE

V_EMPNO EMP.EMPNO%TYPE;

V_ENAME EMP.ENAME%TYPE;

V_JOB EMP.JOB%TYPE;

V_MGR EMP.MGR%TYPE;

V_HIREDATE EMP.HIREDATE%TYPE;

V_SAL EMP.SAL%TYPE;

V_COMM EMP.COMM%TYPE;

V_DEPTNO EMP.DEPTNO%TYPE;

BEGIN

V_EMPNO:='2302';

V_ENAME:='AVILA';

V_JOB:='DESING';

V_MGR:='1703';

V_HIREDATE:=SYSDATE;

V_SAL:='1500';

V_COMM:=NULL;

V_DEPTNO:='60';

INSERT INTO EMP

VALUES(V_EMPNO,V_ENAME,V_JOB,V_MGR,V_HIREDATE,V_SAL,V_COMM,V_DEPTNO);

DBMS_OUTPUT.PUT_LINE('EMPLEADO INGRESADO CORRECTAMENTE!!!');

COMMIT;

EXCEPTION

WHEN DUP_VAL_ON_INDEX THEN

DBMS_OUTPUT.PUT_LINE('YA EXISTE EMPLEADO CON ESTE CODIGO INGRESADO');

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('ERROR DESCONOCIDO');

END;

select * from emp;


/*PREGUNTA 3

Escribir un bloque PL/SQL que reciba una cadena y visualice el nombre del departamento (dname) y el codigo del
departamento (deptno) de todos los departamentos cuyo nombre contenga

la cadena especificada (variable sustitucion "&"). Al finalizar visualizar el numero de departamentos mostrados. en caso
no exista ningun departamento con dicha cadena, generar

una Excepcion que lance el mensaje "Dpartamento no existe" en consola. (Utilizar variable tipo TYPE).*/

SET serveroutput ON;

DECLARE

INICIAL varchar2(10):='&'||'&INICIAL'||'&';

total_filas integer;

mensajeerror EXCEPTION;

BEGIN

DECLARE

CURSOR c_nuevocursor IS

select DEPTNO,DNAME,LOC FROM DEPT

WHERE DNAME LIKE UPPER(INICIAL);

BEGIN

FOR X IN C_NUEVOCURSOR

LOOP

DBMS_OUTPUT.PUT_LINE (X.DEPTNO || ' ' || X.DNAME || ' ' || X.LOC);

END LOOP;

END;

BEGIN

SELECT COUNT(*) INTO TOTAL_FILAS FROM DEPT

WHERE DNAME LIKE UPPER(INICIAL);

IF (TOTAL_FILAS>=1) THEN

DBMS_OUTPUT.PUT_LINE ('Cantidad de Departamentos: ' || total_filas);

ELSE

RAISE mensajeerror;

END IF;

EXCEPTION WHEN mensajeerror then

DBMS_OUTPUT.PUT_LINE ('Departamento no existe');

END;
END;

select * from dept;

/*PREGUNTA 4

Elaborar un bloque PL/SQL que muestre el empno, ename y dname de todos los empleados donde su codigo (empno)
sea par. Utilizar Cursores.*/

SET serveroutput ON;

DECLARE

xempno emp.empno%type;

xename emp.ename%type;

xdname dept.dname%type;

BEGIN

DECLARE

CURSOR c_nuevocursor IS

select E.EMPNO,E.ENAME,D.DNAME FROM EMP E

INNER JOIN DEPT D ON E.DEPTNO=D.DEPTNO

WHERE MOD(E.EMPNO,2) = 0;

BEGIN

FOR X IN C_NUEVOCURSOR

LOOP

DBMS_OUTPUT.PUT_LINE (X.EMPNO || ' ' || X.ENAME || ' ' || X.DNAME);

END LOOP;

END;

END;

You might also like