Язык программирования баз данных Informix-4GL
5c8b6e8c

Использование курсоров в операциях модификации данных


Для повышения эффективности выполнении операций 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 приводит к более быстрому исполнению программы.



Содержание раздела