Использование курсоров в операциях модификации данных
Для повышения эффективности выполнении операций Delete, Update и Insert можно использовать специальные формы курсоров.
Использование курсоров для удаления текущей строки
Для удаления строки, которая была выбрана по курсору последней, необходимо использовать оператор Delete совместно с курсором. Для этого следует включить конструкцию FOR UPDATE в оператор Declare для последовательного курсора и конструкцию Where Current of в последующий оператор Delete.
Ниже приведен пример программы, удаляющей строки с дубликатами номеров заказов.
Использование курсоров для корректировки текущей строки
Для корректировки строки, которая была выбрана по курсору последней, необходимо использовать оператор Update совместно с курсором. Для этого следует включить конструкцию FOR UPDATE в оператор Declare для последовательного курсора и конструкцию Where Current of в последующий оператор Update.
Перечисление в конструкции FOR UPDATE оператора Declare имен столбцов указывает на недопустимость корректировки столбцов, имена которых отличны от названных. Любая попытка корректировки необозначенных столбцов вызовет ошибку.
В нижеприведенном фрагменте программы из столбца Datcol таблицы Target удаляются ошибочно занесенные NULL-значения, а в столбец Serial заносятся неповторяющиеся значения целого типа.
Использование курсоров для вставки
Курсор для вставки оператора Insert используется совместно с операторами PUT, FLUSH, которые позволяют выполнить более эффективный ввод данных в базу данных, благодаря буферизации данных в памяти.
PUT | Устанавливает буфер ввода для курсора оператора Insert. PUT сохраняет строку в буфере оператора Insert для последующего ввода в базу данных. Когда буфер заполнен целиком, он автоматически записывается в требуемую таблицу как блок. |
FLUSH | Принудительно переносит строки из буфера в таблицу базы данных. |
Приведенный ниже фрагмент программы заполняет базу данных с использованием аппарата курсора. Используемая в тексте функция next_cust возвращает либо информацию о новом клиенте, либо Null-значение, сигнализирующее об окончании ввода. Если эта функция возвращает значение, отличное от NULL-значения, оператор PUT посылает полученные данные в буфер строк. Когда буфер заполняется, строки, которые он содержит, автоматически пересылаются на сервер. Цикл нормально завершается, когда next_cust перестает возвращать данные.
Замечание. Использование курсорных средств и операторов PUT, FLUSH взамен оператора INPUT приводит к более быстрому исполнению программы.