Оператор открытия курсора имеет следующий синтаксис:
OPEN <имя_курсора>
[USING <список базовых перёменных>]
Именно оператор
открытия курсора инициирует выполнение базового запроса, соответствующего описанию
курсора, заданному в операторе DECLARE ... CURSOR. При выполнении оператора
OPEN СУБД производит семантическую проверку курсора, то есть выполняет этапы
со 2 по 5 в алгоритме выполнения запросов (рис. 12.1), поэтому именно здесь
СУБД возвращает коды ошибок прикладной программе, сообщающие ей о результатах
выполнения базового запроса. Ошибки могут возникнуть в результате неправильного
задания имен нолей или имен исходных таблиц или при попытке извлечь данные из
таблиц, к которым данный пользователь не имеет доступа.
По стандарту
СУБД возвращает код завершения операции в специальной системной переменной SQLCODE.
В прикладной программе пользователь может анализировать эту переменную, что
необходимо делать после выполнения каждого оператора SQL. При неудачном выполнении
операции открытия курсора СУБД возвращает отрицательное значение SQLCODE.
В случае
удачного завершения выполнения оператора открытия курсора набор данных, сформированный
в результате базового запроса, остается доступным пользователю до момента выполнения
оператора закрытия курсора.
Однако надо
помнить, что СУБД автоматически закрывает все курсоры в случае завершения транзакции
(COMMIT) или отката транзакции (ROLLBACK). После того как курсор закрыт его
можно открыть снова, но при этом соответствующий запрос выполнится заново. Поэтому
допустимо, что содержимое первого курсора будет не соответствовать его содержимому
при повторном открытии, потому что за это время изменилось состояние БД.