PL/SQL: курсоры (неявные и явные), атрибуты курсоров, объявление и схема работы с явным курсором, явные курсоры с параметрами, операторы INSERT, DELETE, UPDATE в PL/SQL, курсорные переменные и их применение, курсорные подзапросы, параметры Oracle, связанные с курсорами, конструкция WHERE CURRENT OF, псевдостолбцы ROWID, ROWNUM .
Курсор -указатель на область памяти, в которой содержится результирующий набор SQL-запроса, позволяющий индивидуально обрабатывать содержащиеся в результирующем наборе строки. Курсоры могут использоваться при выполнении DML-операторов, называются неявными, а курсоры, которые создают и используют разработчики приложений - явными. Неявные курсоры вызываются всякий раз, когда в PL/SQL используется оператор SELECT. Они могут использоваться только в операторах, которые возвращают не более одной строки.Не явные курсоры не требуют объявления и открытия, в то время как явные курсоры нужно объявить, открыть, считать и закрыть. Но явные курсоры позволяют обрабатывать запрос, возвращающий несколько строк.
Курсор Oracle –указатель на область в PGA (контекстная область) в которой хранится: 1)строки запроса, 2)число строк, 3)указатель на разобранный запрос в общем пуле.
Открытие курсора–создание контекстной области PGA (создается моментальный снимок (snapshot) данных запроса).
WHERE CURRENT OF – определяет только что считанную строку.
ROWID-двухбайтовая величина, которая соответствует физическому положению любой строки БД.
BBBBBBBB – шестнадцатеричный номер блока в файле данных, в котором находится строка.
RRRR – шестнадцатеричный номер строки
FFFF – файл, в состав которого входит блок
ROWNUM-используется для ограничения кол-ва выводимых записей.
DECLARE
CURSOR CUR IS SELECT T.TEACHER_NAME, P.PULPIT_NAME FROM TEACHER T INNER JOIN PULPIT P ON T.PULPIT = P.PULPIT;
REC CUR%ROWTYPE;
BEGIN
FOR REC IN CUR
LOOP
DBMS_OUTPUT.PUT_LINE(REC.TEACHER_NAME||' | Кафедра | '||REC.PULPIT_NAME||' '||CUR%ROWCOUNT);