Está en la página 1de 4

SET SERVEROUTPUT ON SIZE 10000;

------------BUCLES REPETITIVOS---------------
DECLARE
N INT :=& VAR;
CONT INT :=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(CONT);
CONT:=CONT+1;
IF CONT>N THEN
EXIT;
END IF;
END LOOP;
END;

-- otra manera de salir del LOOP


DECLARE
N INT :=& VAR;
CONT INT :=1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(CONT);
CONT:=CONT+1;
EXIT WHEN CONT>N;
END LOOP;
END;

-------------WHILE-------------------
DECLARE
N INT :=& VAR;
CONT INT :=1;
BEGIN
WHILE CONT <=N LOOP
DBMS_OUTPUT.PUT_LINE(CONT);
CONT:=CONT+1;

END LOOP;
END;

---------------FOR--------------------
DECLARE
N INT :=& VAR;
BEGIN
FOR CONT IN 1..N LOOP
DBMS_OUTPUT.PUT_LINE(CONT);
END LOOP;
END;

--------------FOR AL REVES-----------------
DECLARE
N INT :=& VAR;
BEGIN
FOR CONT IN REVERSE 1..N LOOP
DBMS_OUTPUT.PUT_LINE(CONT);
END LOOP;
END;
-------------CURSORES EXPLICITOS----------------------------

DECLARE
nombre EMPLOYEES.FIRST_NAME%TYPE;
CURSOR c1 IS SELECT FIRST_NAME
FROM EMPLOYEES;
BEGIN
OPEN C1;

FETCH C1 INTO nombre;


DBMS_OUTPUT.PUT_LINE(nombre);
END;

---------CURSOR EXPLICITO--%NOTFOUND--------------------
DECLARE
nombre EMPLOYEES.FIRST_NAME%TYPE;
CURSOR c1 IS SELECT FIRST_NAME
FROM EMPLOYEES;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO nombre;
DBMS_OUTPUT.PUT_LINE(nombre);
EXIT WHEN C1%NOTFOUND;
END LOOP;
CLOSE C1;
END;

--------------ROWCOUNT------------------------
DECLARE
nombre EMPLOYEES.FIRST_NAME%TYPE;
CURSOR c1 IS SELECT FIRST_NAME
FROM EMPLOYEES
WHERE department_id=80;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO nombre;
DBMS_OUTPUT.PUT_LINE(nombre);
EXIT WHEN C1%NOTFOUND;
END LOOP;
DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT||' REG. PROCESADOS');
CLOSE C1;
END;

--Crear un bloque an�nimo que muestre los


--tres departamentos que tienen m�s empleados:
--Ejemplo:

--NOMBRE: Shipping CANTIDAD: 45


--NOMBRE: Sales CANTIDAD: 34
--NOMBRE: Finance CANTIDAD: 6

DECLARE
nombre DEPARTMENTS.DEPARTMENT_NAME%TYPE;
CURSOR c1 IS SELECT DEPARTMENT_NAME,COUNT(*)
FROM DEPARTMENTS ;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO nombre;
DBMS_OUTPUT.PUT_LINE(nombre);
EXIT WHEN C1%NOTFOUND;
END LOOP;
DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT||' REG. PROCESADOS');
CLOSE C1;
END;

--Crear un bloque an�nimo que permita mostrar el nombre del empleado


-- y el nombre del departamento donde trabaja

DECLARE
nombre EMPLOYEES.FIRST_NAME%TYPE;
nomb DEPARTMENTS.DEPARTMENT_NAME%TYPE;
CURSOR c1 IS SELECT FIRST_NAME, DEPARTMENT_NAME
FROM EMPLOYEES E, DEPARTMENTS D
WHERE D.DEPARTMENT_ID=E.DEPARTMENT_ID;
BEGIN
OPEN C1;
LOOP
FETCH C1 INTO nombre;
DBMS_OUTPUT.PUT_LINE(nombre);
EXIT WHEN C1%NOTFOUND;
END LOOP;
DBMS_OUTPUT.PUT_LINE(C1%ROWCOUNT||' REG. PROCESADOS');
CLOSE C1;
END;

--Crear un bloque an�nimo para obtener


--el listado de todos los superiores de un empleado,
--ingresar el id del empleado por teclado:
--Ejemplo para el id 111, se debe mostrar:
--Ismael
--Nancy
--Neena
--Steven
DECLARE
nombre EMPLOYEES.FIRST_NAME%TYPE;
id_emp INT :=&var;
id_mang INT;
BEGIN
loop
SELECT FIRST_NAME, MANAGER_ID INTO nombre, id_mang
FROM EMPLOYEES
WHERE EMPLOYEE_ID=id_emp;
DBMS_OUTPUT.PUT_LINE(nombre);
id_emp:=id_mang;
exit when id_mang IS NULL;
END LOOP;
END;
--EJERCICIO 4
--Crear un bloque an�nimo que valide una contrase�a ingresada
-- por teclado, la contrase�a deber� tener como m�nimo 5 caracteres
--y como m�ximo 10 caracteres. Adem�s m�nimamente deber� tener una
--vocal min�scula y una vocal May�scula.
DECLARE
nombre EMPLOYEES.FIRST_NAME%TYPE;
BEGIN
FOR nombre REVERSE 1..cont

--EJERCICIO 5
--Crear la siguiente tabla:
--Producto(id_producto, nombre)
--En la tabla creada registrar 10000 productos

create table product(


id_producto int primary key,
nombre VARCHAR2(20)
);
BEGIN
for cont in 1..10000 loop
insert into product values(cont,'producto'||cont);
end loop;
commit;
end;/

select *from product

También podría gustarte