PL/SQLストアドプロシジャでカーソルを呼び出す方法は?
PL/SQLでは、以下の手順で格納プロシージャカーソルをコールできます。
- カーソル変数を宣言し、カーソルの戻り値の型と問い合わせ文を指定します。
- OPEN文でカーソルを開きます。
- 游標からFETCH文でデータ行を取得し、変数に格納する。
- 取得したデータ行を処理する。
- 3と4の手順を、追加のデータ行がなくなるまで繰り返します。
- カーソルを閉じると、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文を利用してカーソルを閉じます。