La forma más sencilla de iterar sobre las filas de una tabla en PL/SQL es hacer algo como
BEGIN
FOR employees IN (SELECT emp_id FROM emp)
LOOP
dbms_output.put_line( employees.emp_id );
END LOOP;
END;
Alternativamente, puede obtener todos los valores de EID en una colección PL/SQL e iterar sobre la colección, como en este ejemplo
DECLARE
TYPE emp_id_tbl IS TABLE OF emp.emp_id%type;
l_emp_ids emp_id_tbl ;
BEGIN
SELECT emp_id
BULK COLLECT INTO l_emp_ids
FROM emp;
FOR i IN l_emp_ids .FIRST .. l_empnos.LAST
LOOP
dbms_output.put_line( l_emp_ids (i) );
END LOOP;
END;
Sin embargo, si su consulta puede devolver miles de filas, obtener todos los datos en la colección puede usar más memoria PGA de lo que le gustaría y es posible que deba obtener filas en fragmentos utilizando la cláusula LIMIT. Pero eso parecería estar adelantándonos en este momento.