PL / SQLで表の行を反復処理する最も簡単な方法は、次のようなことを行うことです。
BEGIN
FOR employees IN (SELECT emp_id FROM emp)
LOOP
dbms_output.put_line( employees.emp_id );
END LOOP;
END;
または、この例のように、すべてのEID値をPL / SQLコレクションにフェッチして、コレクションを反復処理することもできます。
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;
ただし、クエリが数千行を返す可能性がある場合、コレクションにすべてのデータをフェッチすると、必要以上のPGAメモリが使用される可能性があり、LIMIT句を使用して行をチャンクでフェッチする必要があります。しかし、それは現時点では自分たちより進んでいるように思われます。