Системы обработки информации - язык баз данных SQL

       

Курсоры


Курсор определяется через <объявление курсора> (<declare cursor>). Для каждого <объявления курсора> (<declare cursor>) в <модуле> (<module>) курсор фактически cоздается тогда, когда образуется транзакция (см. 4.16, "Транзакции"), ссылающаяся на этот <модуль> (<module>), и уничтожается, когда эта транзакция завершается.

Курсор находится либо в открытом состоянии, либо в закрытом состоянии. Начальное состояние курсора - закрытое. Курсор переходит в открытое состояние через <оператор открытия> (<open statement>) и возвращается в закрытое состояние через <оператор закрытия> (<close statement>), <оператор фиксации> (<commit statement>) или <оператор отката> (<rollback statement>).

Курсор в открытом состоянии определяет таблицу, порядок строк в этой таблице и позицию относительно этого порядка. Если <объявление курсора> (<declare cursor>) не включает <раздел упорядочивания> (<order by clause>) или включает <раздел упорядочивания> (<order by clause>), не полностью определяющий порядок строк, то строки в таблице имеют порядок, полностью или частично определенный в реализации.

Внутри одной транзакции, если порядок строк не определен или не полностью определен через <раздел упорядочивания> (<order by clause>), относительная позиция двух строк будет в общем случае одна и та же при каждом открытии курсора. Порядок может изменяться от одного раза к другому, если меняются значения базы данных или значения параметров, указанных в <спецификации запроса> (<query specification>) в <объявлении курсора> (<declare cursor>).

В разных транзакциях, даже когда значения базы данных и значения параметров, указанных в <спецификации запроса> (<query specification>), одинаковы, порядок строк, определяемый одинаковыми <спецификациейкурсора>(<cursor specification>) и <оператором открытия> (<open statement>), может быть различным.


Позиция курсора в открытом состоянии может быть перед определенной строкой, на определенной строке или после последней строки. Если курсор установлен на строку, то эта строка является текущей строкой курсора. Курсор может быть установлен перед первой строкой или после последней строки, даже если таблица пуста.

<Оператор чтения> (<fetch statement>) продвигает позицию открытого курсора на следующую строку в порядке этого курсора и выбирает значения столбцов этой строки. <Оператор модификации: позиционный> (<update statement: positioned>) изменяет текущую строку курсора. <Оператор удаления: позиционный> (<delete statement: positioned> удаляет текущую строку курсора.

Если курсор установлен перед некоторой строкой, и новая строка заносится в эту позицию, то оказываемое этим возможное влияние на позицию курсора, если и есть, определяется в реализации.

Если курсор установлен на некоторую строку или перед некоторой строкой, и эта строка удаляется, то курсор устанавливается перед строкой, непосредственно следующей за позицией удаленной строки. Если такая строка не существует, то курсор устанавливается после последней строки.

Если при выполнении <оператора SQL> (<SQL statement>), ссылающегося на открытый курсор, возникает ошибка, то возможное действие этого на позицию или состояние курсора определяется в реализации.

Рабочая таблица - это таблица, возникающая вследствие открытия курсора. Приводит ли открытие курсора к созданию рабочей базовой таблицы или рабочей представляемой таблицы, определяется в реализации.

Каждая строка рабочей представляемой таблицы порождается только тогда, когда курсор позиционируется на эту строку.

Рабочая базовая таблица создается при открытии курсора и уничтожается при закрытии курсора.


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