PL/SQLストアドプロシジャでカーソルを呼び出す方法は?

PL/SQLでは、以下の手順で格納プロシージャカーソルをコールできます。

  1. カーソル変数を宣言し、カーソルの戻り値の型と問い合わせ文を指定します。
  2. OPEN文でカーソルを開きます。
  3. 游標からFETCH文でデータ行を取得し、変数に格納する。
  4. 取得したデータ行を処理する。
  5. 3と4の手順を、追加のデータ行がなくなるまで繰り返します。
  6. カーソルを閉じると、CLOSE ステートメントを使用します。

ストアドプロシジャーカーソルを呼び出すサンプルコードを次に示します。

DECLARE
  -- 声明游标变量
  CURSOR c_emp IS
    SELECT employee_id, first_name, last_name
    FROM employees;
  
  -- 声明变量来存储获取到的数据行
  v_emp_id employees.employee_id%TYPE;
  v_first_name employees.first_name%TYPE;
  v_last_name employees.last_name%TYPE;
BEGIN
  -- 打开游标
  OPEN c_emp;
  
  -- 获取并处理数据行
  LOOP
    FETCH c_emp INTO v_emp_id, v_first_name, v_last_name;
    EXIT WHEN c_emp%NOTFOUND;
    -- 处理数据行
    DBMS_OUTPUT.PUT_LINE('Employee ID: ' || v_emp_id);
    DBMS_OUTPUT.PUT_LINE('First Name: ' || v_first_name);
    DBMS_OUTPUT.PUT_LINE('Last Name: ' || v_last_name);
    DBMS_OUTPUT.PUT_LINE('------------------------');
  END LOOP;
  
  -- 关闭游标
  CLOSE c_emp;
END;
/

上記の例では、カーソル変数c_empはSELECT文の結果セットとして宣言され、OPEN文でカーソルを開きます。ループ処理では、カーソルからFETCH文を利用して、データ行を取得し、該当の変数に格納します。その後、データ行を処理した後に、もう行データがないまでループを続けます。最後にCLOSE文を利用してカーソルを閉じます。

bannerAds