Как говорилось в предыдущем разделе, явные курсоры используются для обработки тех операторов SELECT, которые возвращают более одной строки. Однако каждый оператор SQL выполняется в пределах контекстной области и поэтому имеет курсор, указывающий на конкретную контекстную область. Такой курсор называется SQL- курсором. В отличие от явных курсоров, SQL-курсор не открывается и не закрывается программой. PL/SQL неявно открывает SQL-курсор, обрабатывает SQL-оператор и затем закрывает этот курсор.
Неявные курсоры используются для обработки операторов INSERT, UPDATE, DELETE, а также однострочных операторов SELECT...INTO. SQL-курсор открывается и закрывается PL/SQL, поэтому команды OPEN, FETCH и CLOSE не нужны. Однако для SQL-курсоров можно применять курсорные атрибуты. Например, ниже приводится блок, в котором оператор INSERT выполняется в том случае, если оператору UPDATE не соответствует ни одной строки.
Атрибут можно использовать в операторах
SELECT...INTO, но он мало подходит для этого. Дело в том, что если оператор SELECT...INTO не выбирает ни одной строки, Oracle выдает сообщение об ошибке/
В результате управление блоком сразу же передается разделу обработки исключительных ситуаций, и атрибут SQL%NOTFOUND не проверяется. Проиллюстрируем вышесказанное на примере сеанса SQL*Plus:
Обработка исключительных ситуаций детально обсуждается в главе 7. Заметим, что SQL%NOTFOUND можно проверить внутри обработчика исключительной ситуации NO_DATA_FOUND, но здесь это условие всегда будет истинным.
Можно воспользоваться также атрибутом SQL%ISOPEN, однако он всегда будет возвращать FALSE, поскольку неявный курсор автоматически закрывается после обработки его оператора.
< Предыдущая | Следующая > |
---|