Oracleストアドプロシージャカーソルの例
カーソルを使用してレコードを操作またはナビゲートするOracleデータベースのストアドプロシージャの例を次に示します。
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('example',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; /
Result
「example%」のようなユーザー名のレコードは、getDBUSERCursor
ストアドプロシージャを介してカーソルとして返されます。