Команда DECLARE CURSOR советы и хитрости Oracle
На платформе Oracle реализация курсоров весьма интересна. В действительности все инструкции Oracle, связанные с модификациями данных (INSERT, UPDATE, DELETE и SELECT), неявно открывают курсор. Например, программе на С, обращающейся к Oracle, не нужно подавать команду DECLARE CURSOR, чтобы извлекать данные построчно, поскольку такое поведение в Oracle задается по умолчанию. Поэтому инструкция DECLARE CURSOR используется только в конструкциях PL/SQL, таких, как хранимые процедуры, и не применяется в.скриптах на «чистом» SQL.
Поскольку в Oracle курсоры можно использовать только в хранимых процедурах и пользовательских функциях, они документируются в справочном материале PL/SQL, а не в справке по SQL.
В Oracle применяется вариант инструкции DECLARE CURSOR, поддерживающий параметризованный ввод. Синтаксис приводится ниже.
DECLARE CURSOR имя_курсора [(параметр тип_данных [, …])] IS инструкция_select
[FOR UPDATE [OF имя_столбца [, …]]}]
Где:
параметр тип Данных [, …])] IS инструкция_select
Определяется инструкция_select, которая используется для получения результирующего набора данных. Она служит той же цели, что и инструкция ANSI SQL FOR инструкция_select.
FOR UPDATE [OF имя_столбца]
Указывается, что курсор или конкретные столбцы курсора являются обновляемыми. В противном случае курсор считается курсором только для чтения. В Oracle переменные нельзя использовать в предложении WHERE инструкции SELECT, если только они заранее не объявлены как переменные. Параметрам в инструкции DECLARE значения не присваиваются. Значения присваиваются в инструкции OPEN. Это важно, потому что системная функция вернет одно и то же значение во всех строках в результирующем наборе курсора.