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ストアドプロシージャを介してカーソルとして返されます。