sábado, 10 de agosto de 2013

PROCEDIMIENTOS ANÓNIMOS

PROCEDIMIENTOS ANÓNIMOS



Procedimientos anónimos para obtener los tres empleados con más
subordinados con bucle for

SET SERVEROUTPUT ON
DECLARE
CURSOR c IS
SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
BEGIN
DBMS_OUTPUT.PUT_LINE('Prueba cursor (3 superjefes) bucle FOR');
FOR fila IN c LOOP
EXIT WHEN C%ROWCOUNT >3;
DBMS_OUTPUT.PUT_LINE(fila.cojefe||' '||fila.cuenta);
END LOOP;
END;
/

- Procedimientos anónimos para obtener los tres empleados con más subordinados con bucle normal

DECLARE
wjefe CHAR(4);
wcount INTEGER;
CURSOR c IS SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
fila c%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Prueba de cursor (3 superjefes) con
Open/Fetch/Close ** BUCLE NORMAL');
OPEN c;
LOOP
FETCH c INTO fila;
EXIT WHEN C%NOTFOUND OR c%ROWCOUNT >3;
DBMS_OUTPUT.PUT_LINE(fila.cojefe||' '||fila.cuenta);
END LOOP;
CLOSE c;
END;
/

- Procedimientos anónimos para obtener los tres empleados con más subordinados con bucle while

DECLARE
wjefe CHAR(4);
wcount INTEGER;
CURSOR c IS
SELECT cojefe,count(*) AS cuenta FROM empleados
GROUP BY cojefe ORDER BY 2 DESC;
fila c%ROWTYPE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Prueba de cursor (3 superjefes) con
Open/Fetch/Close ** BUCLE WHILE');
OPEN c;
WHILE c%ROWCOUNT<3 LOOP
FETCH c INTO fila;
EXIT WHEN C%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(fila.cojefe||' '||fila.cuenta);
END LOOP;
CLOSE c;
END;
/

-- Para no crear ningún objeto en la BD

ROLLBACK WORK;


No hay comentarios:

Publicar un comentario