PLSQL SELECTの結果を取得する~取得結果が複数行の場合~
PLSQL カーソルを使用してデータを取得する
今回はパラメータ付きカーソルについてです。
カーソルにはパラメータを渡すことができます。
カーソルを定義する際に、カーソル名称とISの間に引数を宣言します。
カーソルFORループを使用せず、明示的にカーソルのオープン、クローズを行うパターンでの使用例
カーソルオープンする際に、カーソルのパラメータを指定する必要があります。
DECLARE --カーソル定義 CURSOR member_csr(prmMemberId Member.MemberId%Type) IS SELECT * FROM Member WHERE MemberId >= prmMemberId; --レコード変数 member_rec member_csr%Rowtype; BEGIN --カーソルオープンする際に引数を指定する OPEN member_csr('2'); BEGIN LOOP FETCH member_csr INTO member_rec; EXIT WHEN member_csr%NOTFOUND; SYS.DBMS_OUTPUT.PUT_LINE(member_rec.memberid || ' ' || member_rec.membername); END LOOP; --カーソルクローズ CLOSE member_csr; EXCEPTION WHEN others THEN --例外が発生してもカーソルをクローズする CLOSE member_csr; --例外を親ブロックへ伝播する。(必要な場合のみ) RAISE; END; END;
カーソルFORループでの使用例
こちらはループごとにパラメータを指定することができます。
DECLARE --カーソル定義 CURSOR member_csr(prmMemberId Member.MemberId%Type) IS SELECT * FROM Member WHERE MemberId = prmMemberId; BEGIN FOR idx IN 1..3 LOOP --ループ毎にカーソル引数を指定できる FOR member_rec IN member_csr(idx) LOOP SYS.DBMS_OUTPUT.PUT_LINE(member_rec.memberid || ' ' || member_rec.membername); END LOOP; END LOOP; END;カーソルのパラメータは型を指定することはできますが、精度は指定できません。
DECLARE CURSOR cur(id VARCHAR2) IS SELECT * FROM Member WHERE MemberId = id; BEGIN FOR rec IN cur('1') LOOP SYS.DBMS_OUTPUT.PUT_LINE(rec.MemberName); END LOOP; END;
0 件のコメント:
コメントを投稿