Для выборки из базы данных многих записей и последующей обработке их в программе вводится понятие курсора. Курсор может быть неявным или явным. При однострочной выборке, курсор обычно неявный. При многострочной выборке необходимо явно указать курсор.
Синтаксис объявления явного курсора:
CURSOR имя_курсора IS команда_SELECT;
Пример.
DECLARE.
CURSOR q IS.
SELECT ns, name FROM sotrud.
WHERE ns=140;
Управление явным курсором производится по следующей схеме, см. рис. 4.
запрос программирование курсор выборка.
Рис. 4. Схема управления курсором
Пример. Выборка данных из курсора.
SET SERVEROUTPUT ON.
DECLARE.
CURSOR q IS.
SELECT ns, name FROM sotrud.
WHERE ns=140;
num sotrud. ns%TYPE;
lname sotrud.name%TYPE;
BEGIN.
OPEN q;
FETCH q INTO num, lname;
DBMS_OUTPUT.PUT_LINE (num || ` ` || lname);
.. .
END;
Пример. Выборка данных в цикле.
SET SERVEROUTPUT ON.
DECLARE.
CURSOR q IS.
SELECT ns, name FROM sotrud.
WHERE ns=140;
num sotrud. ns%TYPE;
lname sotrud.name%TYPE;
BEGIN.
OPEN q;
LOOP.
FETCH q INTO num, lname;
EXIT WHEN q%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (num || ` ` || lname);
END LOOP;
.. .
END;
Курсорный цикл FOR.
Курсорный цикл FOR включает курсор SELECT и позволяет осуществлять выборку нескольких строк из базы данных. При этом не нужно заботиться об открытии и закрытии курсора. ORACLE сделает это самостоятельно внутри цикла. В цикле FOR объявлять курсор не требуется.
Пример.
SET SERVEROUTPUT ON.
BEGIN.
FOR q IN (SELECT ns, name FROM sotrud.
WHERE ns=140;
LOOP.
DBMS_OUTPUT.PUT_LINE (q.ns || ` ` || q.name);
END LOOP;
END;
Здесь переменная q используется для сохранения результатов выполнения курсора.