カーソルによって返されたすべてのレコードに対していくつかの計算を実行するプロシージャがあります。次のようになります。
PROCEDURE do_calc(id table.id_column%TYPE)
IS
CURSOR c IS
SELECT col1, col2, col3
FROM table
WHERE ...;
BEGIN
FOR r IN c LOOP
-- do some complicated calculations using r.col1, r.col2, r.col3 etc.
END LOOP;
END;
ここで、別のテーブルから取得した別のレコード セットに対してまったく同じ計算を実行する必要がある場合があります。ただし、これらは上記の例と同じ「形状」を持っています。
次のような手順を書くことは可能ですか?
PROCEDURE do_calc2(c some_cursor_type)
IS
BEGIN
FOR r IN c LOOP
-- do the calc, knowing we have r.col1, r.col2, r.col3, etc.
END LOOP;
END;
については知ってSYS_REFCURSOR
いますが、もっと便利なFOR ... LOOP
構文と暗黙的なレコード型を使用できるかどうか疑問に思っていました。