A pouco tempo atrás me peguei imaginando como percorrer um conjunto de dados gerado por uma consulta a ser construida. Bom para executar uma consulta nesse formato usamos o “EXECUTE IMMEDIATE”, até ai sem novidades, mas e o loop? Para resolver isso executamos a consulta, colocamos o resultado em uma coleção (BULK COLLECT) e realizamos loop nessa coleção, simples não?
Agora vamos ao código:
CREATE OR REPLACE PROCEDURE PRC_EXECIMMEDIATE AS TYPE ItemRec IS RECORD ( item_id NUMBER, dup_cnt NUMBER); TYPE ItemSet IS TABLE OF ItemRec; dup_items ItemSet; BEGIN EXECUTE IMMEDIATE ' SELECT deptno, COUNT(DISTINCT ename) dup_cnt ' || ' FROM emp ' || ' GROUP BY deptno ' || ' HAVING COUNT(DISTINCT ename) > 1' BULK COLLECT INTO dup_items; FOR i IN dup_items.FIRST..dup_items.LAST LOOP dbms_output.put_line( dup_items(i).item_id ); -- processamento aqui END LOOP; END PRC_EXECIMMEDIATE;
Comentários
Postar um comentário
Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.