Курсоры в PSQL
Курсоры в PSQL
Курсоры состоят из трех основных элементов:
* набора строк, определенных выражением SELECT;
* указателя, который перемещается через набор от первой строки к последней, изолируя строку для некоторого вида деятельности;
* набора переменных- определенных как локальные переменные, выходные аргументы или и те, и другие, - для получения значения столбцов, возвращаемых каждой строкой при ссылке на них указателя.
Проход указателя через набор может рассматриваться как операция "цикла". Операции, выполняющиеся в процессе этого "цикла", когда указатель ссылается на строку, могут быть простыми или сложными.
PSQL имеет две реализации курсора, одна хорошо известная, а другая не была ранее документирована.
* Хорошо известная реализация представлена конструкцией FOR ... SELECT, которая полностью реализует синтаксис цикла и широко используется в процедурах выбора. Она подробно обсуждается в следующем разделе. При этом также допустимо выполнение цикла курсора FOR ... SELECT и внутри выполняемых процедур, как мы видели в предыдущем примере.
* Менее известной реализацией является ранняя реализация, иногда называемая изменяемым или именованным курсором, которая была наследована от ESQL и долгое время была осуждаема. Она представляет объект курсор и позволяет выполнять изменения и удаления. Ее синтаксис будет более понятен тем, кто использовал курсоры в языках процедур в других СУБД. Сейчас мы его вкратце рассмотрим.
! ! !
ПРИМЕЧАНИЕ. Синтаксис и механизм именованного курсора были заново реализованы в процессе разработки Firebird 2. Это краткое описание является лебединой песней старых курсоров, поскольку новый синтаксис вряд ли будет совместимым со старым.
. ! .
"Старый" изменяемый курсор
Его синтаксис выглядит следующим образом:
. . .
FOR SELECT <список-столбцов>
FROM <имя-таблицы>
FOR UPDATE
INTO <переменные>
AS CURSOR <имя-курсора>
DO
/* либо UPDATE ... */
BEGIN
UPDATE <имя-таблицы>
SET ... WHERE CURRENT OF <имя-курсора>;
. . .
END
/* или DELETE */
BEGIN
DELETE FROM <имя-таблицы>
WHERE CURRENT OF <имя-курсора>
END
. . .
Используйте его сейчас, но ждите изменений в более поздних версиях Firebird. Это очень быстрый способ добавить множество операций в хранимую процедуру, поскольку здесь используется RDB$DB_KEY для локализации записей. RDB$DB_KEY (или просто DBKEY) является внутренней возможностью, которая может быть использована во множестве ситуаций. См. разд. "Темы оптимизации: использование внутреннего RDB$DBKEY".
! ! !
СОВЕТ. Просмотрите заметки по релизу для нового синтаксиса курсора PSQL. На момент написания данной книги описание отсутствовало.
. ! .
Более поздняя реализация курсоров, обсуждаемая далее, является более гибкой.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Курсоры
Курсоры Курсоры — механизм просмотра данных в области данных; через них осуществляется весь доступ к данным. Курсор, о котором мы сейчас говорим, — системный объект MI. DB2/400 поддерживает позиционируемые (scrollable) и последовательные файловые курсоры в соответствии со
Прокручиваемые курсоры
Прокручиваемые курсоры Gemini ODBC-драйвер поддерживает наравне с однонаправленными (FORWARD-ONLY) курсорами также статические (STATIC) необновляемые
Отображение и курсоры
Отображение и курсоры В данной категории настраивают внешний вид указателей мыши при выполнении различных операций (рис. 14.10). Рис. 14.10. Настройка указателей мышиПо умолчанию указатели при работе с инструментами, использующими кисть, отображаются в виде окружностей,
11.2. Ограничения на курсоры сервера
11.2. Ограничения на курсоры сервера Курсоры стороны сервера выполнены в C API через функцию mysql_stmt_attr_set(). Та же самая реализация используется для курсоров в сохраненных подпрограммах. Курсор стороны сервера позволяет набору результатов быть сгенерированным на стороне
Процедурный язык (PSQL)
Процедурный язык (PSQL) Стандарт не описывает возможности процедурного языка, поскольку в принципе предполагает, что общие задачи программирования будут решены с использованием языка программирования. Не существует спецификаций для конструкций языка по манипулированию,
Выражения в PSQL
Выражения в PSQL Процедурный язык для триггеров и хранимых процедур PSQL широко использует выражения для управления потоком выполнения. PSQL предоставляет структуры IF(<предикат>) THEN и WHILE(<предикат>) DO. Любой предикат, который может быть использован в условии поиска, также
Курсоры для реентерабельных соединений
Курсоры для реентерабельных соединений Для выполнения реентерабельного соединения сервер поддерживает один внутренний курсор для каждого потока в пределах образа одной таблицы. Концептуально он трактует контексты двух курсоров, как если бы они были отдельными
"Точки сохранения" в PSQL
"Точки сохранения" в PSQL Добавление возможностей создания пользовательских точек сохранения в Firebird 1.5 позволяет приложению управлять область действия отката транзакции. В PSQL всегда была возможность обработки исключений. Подробности см. в главе
Расширения языка PSQL
Расширения языка PSQL Расширения языка PSQL включают следующие языковые элементы:* операторы BEGIN и END для выделения блоков кода, которые могут быть вложенными;* операторы DECLARE VARIABLE для объявления локальных переменных;* конструкция FOR SELECT <спецификация-выбора> INTO
Ограничения PSQL
Ограничения PSQL Существуют некоторые ограничения языка для кодов в модулях PSQL.* Операторы, использующие подмножество языка определения данных (DDL) SQL Firebird, не разрешены в PSQL[111].* Операторы управления транзакциями недопустимы в PSQL, потому что хранимые процедуры и триггеры
Типы операторов, не поддерживаемых в PSQL
Типы операторов, не поддерживаемых в PSQL Следующие типы операторов не поддерживаются в триггерах и хранимых процедурах:* операторы языка определения данных (т. е. операторы, начинающиеся с ключевых слов CREATE, RECREATE, ALTER или DROP; SET GENERATOR; DECLARE EXTERNAL FUNCTION: DECLARE FILTER);* операторы
ГЛАВА 29. Разработка модулей PSQL.
ГЛАВА 29. Разработка модулей PSQL. Хранимые процедуры и триггеры объявляются при помощи операторов CREATE PROCEDURE и CREATE TRIGGER соответственно. Каждый из этих сложных операторов состоит из заголовка и
Особенности PSQL для триггеров
Особенности PSQL для триггеров Два особых элемента PSQL доступны триггерам: логические контекстные переменные событий INSERTING, UPDATING и DELETING и контекстные переменные NEW и OLD. Переменные события В Firebird появляются логические контекстные переменные INSERTING, UPDATING и DELETING, чтобы
Курсоры
Курсоры Так как пользователь при работе использует стилус, то Windows Mobile не отображает на экране устройства стандартную стрелку курсора. Предполагается, что пользователь может самостоятельно попасть острым концом стилуса в маленькую кнопку или другой элемент. Но у