パラメーター付きカーソル (PL/SQL)

パラメーター付きカーソルとは、オープン時に、渡されるパラメーター値を受け入れることができる静的カーソルのことです。

以下の例には、パラメーター付きカーソルが含まれています。 このカーソルでは、EMP 表内における、渡されるパラメーター値で指定される値よりも給料が少ない各従業員の名前および給料が表示されます。
DECLARE
    my_record       emp%ROWTYPE;
    CURSOR c1 (max_wage NUMBER) IS
        SELECT * FROM emp WHERE sal < max_wage;
BEGIN
    OPEN c1(2000);
    LOOP
        FETCH c1 INTO my_record;
        EXIT WHEN c1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('Name = ' || my_record.ename || ', salary = '
            || my_record.sal);
    END LOOP;
    CLOSE c1;
END;
max_wage の値として 2000 が渡されると、給料が 2000 未満の従業員の名前および給料データのみが返されます。
Name = SMITH, salary = 800.00
Name = ALLEN, salary = 1600.00
Name = WARD, salary = 1250.00
Name = MARTIN, salary = 1250.00
Name = TURNER, salary = 1500.00
Name = ADAMS, salary = 1100.00
Name = JAMES, salary = 950.00
Name = MILLER, salary = 1300.00
パラメーター付きカーソルは、それ自身のパラメーターのみを参照できます。 パラメーター付きカーソルは、ローカル変数を参照することはできません。次の例では in_id がカーソルの有効範囲内でないため、SELECT ステートメント内では cursor_id を使用する必要があります。
CREATE OR REPLACE PROCEDURE myproc (in_id IN NUMBER) IS
  CURSOR c(cursor_id in NUMBER) IS
  SELECT id,emp_name FROM employee WHERE id = cursor_id; 
  empName VARCHAR2(100);
  
  BEGIN
    FOR r IN c(in_id) LOOP
      empName := r.emp_name;
      DBMS_OUTPUT.PUT_LINE(empName);
    END LOOP;
  END;