Пример курсора хранимой процедуры Oracle

Вот пример хранимой процедуры в базе данных Oracle с использованием курсора для управления записями или навигации по ним.

1. Table SQL Script

Сценарий создания таблицы 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

Получите возвращенный курсор ref и перемещайтесь по записям так:

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;/…​.

ссылка://тег/курсор/[курсор]ссылка://тег/оракул/[оракул]ссылка://тег/хранимая процедура/[хранимая процедура]