Oracleデータベースのストアド・プロシージャの例は、Cursorを使用してレコードを操作またはナビゲートします。

1.テーブルSQLスクリプト

DBUSERテーブル作成スクリプト。

CREATE TABLE DBUSER (
  USER__ID       NUMBER (5)    NOT NULL,
  USERNAME      VARCHAR2 (20)  NOT NULL,
  CREATED__BY    VARCHAR2 (20)  NOT NULL,
  CREATED__DATE  DATE          NOT NULL,
  PRIMARY KEY ( USER__ID )
 )

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

ストアドプロシージャは、一致したユーザ名に基づいてレコードをカーソルタイプ(

SYS__REFCURSOR

)として返します。

CREATE OR REPLACE PROCEDURE getDBUSERCursor(
       p__username IN DBUSER.USERNAME%TYPE,
       c__dbuser OUT SYS__REFCURSOR)
IS
BEGIN

  OPEN c__dbuser FOR
  SELECT **  FROM DBUSER WHERE USERNAME LIKE p__username || '%';

END;/....

===  3. PL/SQLからのコール

返された参照カーソルを取得し、次のようなレコードをナビゲートします。

DECLARE
c

dbuser SYS

REFCURSOR;
temp__dbuser DBUSER%ROWTYPE;
BEGIN

--records are assign to cursor 'c__dbuser'
getDBUSERCursor('mkyong',c__dbuser);

LOOP

    --fetch cursor 'c__dbuser' into dbuser table type 'temp__dbuser'
FETCH c__dbuser INTO temp__dbuser;

--exit if no more records
EXIT WHEN c__dbuser%NOTFOUND;

--print the matched username
dbms__output.put__line(temp__dbuser.username);

END LOOP;

CLOSE c__dbuser;

END;/…​.

リンク://タグ/カーソル/[カーソル]リンク://タグ/oracle/[oracle]

ストアドプロシージャ