「Oracle」ストアドプロシージャのカーソルを使ってみる

以下のエントリーで簡単なストアドプロシージャを作成してみましたが、今回はカーソルを使うストアドプロシージャを作成してみたのでメモしておきます。

・「Oracle」ストアドプロシージャを作成してみる - プログラム日記
http://a4dosanddos.hatenablog.com/entry/2015/05/08/010524

1. テスト用テーブルの作成 ( 上記のエントリーと同様のテーブルを使用してます )


カラムが id と name だけの簡単なテーブルにしました。

create table t1 (id number(10), name varchar(10), primary key (id));

データもつっこんでおきます。

insert into t1 values (1, 'aaa');
insert into t1 values (2, 'bbb');
insert into t1 values (3, 'ccc');
insert into t1 values (4, 'aaa');
commit;


2.ストアドプロシージャの作成


上記のテーブル t1 を条件 name で select して、取得結果を出力パラメータに格納するストアドプロシージャになります。

■ 仕様部

create or replace package bbb as
  type cursortype is ref cursor;
  procedure select_t1_cursor (aa in varchar, bb out cursortype);
end bbb;
/

■ 本体

create or replace package body bbb as
  procedure select_t1_cursor (aa in varchar, bb out cursortype) is
  begin
    begin
      open bb for select * from t1 where name = aa;
    end;
  end;
end bbb;
/

実行は以下の感じで。

set serveroutput on
variable bb refcursor
execute bbb.select_t1_cursor('aaa', :bb)

実行結果

print :bb

        ID NAME
---------- ------------------------------
         1 aaa
         4 aaa


非常に簡単な内容ですが、ひとまずはこれぐらいでいいかな。

[ 環境情報 ]
CentOS 5.5
Oracle Database 11g Release 2 ( 11.2.0.1.0 )