Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к зачету.docx
Скачиваний:
6
Добавлен:
19.09.2019
Размер:
590.16 Кб
Скачать

Into переменная [[indicator] индикаторная_переменная]

[,переменная [[INDICATOR] индикаторная_переменная]] ...

FROM базовая_таблица | представление [псевдоним]

[,базовая_таблица | представление [псевдоним]] ...

[WHERE фраза]

[GROUP BY фраза [HAVING фраза]];

Пример синтаксиса выражения явного объявления курсора:

DECLARE <имя_курсора> CURSOR

FOR <подзапрос>

OPEN <имя_курсора>

Описанные с помощью DECLARE CURSOR множества используются рядом предложений SQL для удаления отмеченных строк (DELETE), их модификации (UPDATE) или присвоения значений перечисленных в SELECT столбцов переменным, список которых указывается в предложении FETCH (вызвать). Однако перед выполнением этих команд необходимо активизировать курсор, который в этот момент не должен быть открыт. Для этого используется предложение OPEN (OPEN имя_курсора).

Предложение FETCH используется для выборки той записи активного множества, на которую указывает курсор, для присвоения значений столбцов этой записи переменным, перечисленным во фразе INTO, и для перемещения курсора на следующую строку активного множества. При перемещении за последнюю строку переменная SQLCODE примет значение +100.

FETCH имя_курсора

Into переменная [[indicator] индикаторная_переменная]

{,переменная [[INDICATOR] индикаторная_переменная]} ...

Команды завершения работы с курсором:

  • Дезактивация курсора : CLOSE <имя_курсора>

  • Уничтожение курсора : DROP CURSOR <имя_курсора>.

Проблемы модификации данных в курсорах

Реализация

Способы реализации поддержки статических и динамических

курсоров

1. «Тупой» : объявление курсора в режиме «только чтение»

DECLARE Cur1 CURSOR FOR READ ONLY

2. «Продвинутый» : объявление «нечувствительного» курсора (для нашей таблицы s ):

DECLARE Cur1 INSENSITIVE CURSOR

FOR SELECT * FROM S;

Хранимые процедуры.

Практический опыт создания приложений обработки данных показывает, что ряд операций над данными, реализующих общую для всех пользователей логику и не связанных с пользовательским интерфейсом, целесообразно вынести на сервер. Однако, для написания процедур, реализующих эти операции стандартных возможностей SQL не достаточно, поскольку здесь необходимы операторы обработки ветвлений, циклов и т.д. Поэтому многие поставщики СУБД предлагают собственные процедурные расширения SQL (PL/SQL компании Oracle и т.д.). Эти расширения содержат логические операторы (IF ... THEN ... ELSE), операторы перехода по условию (SWITCH ... CASE ...), операторы циклов (FOR, WHILE, UNTIL) и операторы предачи управления в процедуры (CALL, RETURN). С помощью этих средств создаются функциональные модули, которые хранятся на сервере вместе с базой данных. Обычно такие модули называют хранимые процедуры. Они могут быть вызваны с передачей параметров любым пользователем, имеющим на то соответствующие права. В некоторых системах хранимые процедуры могут быть реализованы и в виде внешних по отношению к СУБД модулей на языках общего назначения, таких как C или Pascal.

Пример для СУБД PostgreSQL:

CREATE FUNCTION

<имя_функции> ([<тип_параметра1>,<тип_параметра2>,...])

RETURNS <возвращаемые_типы>

AS [ <SQL_оператор> | <имя_объектного_модуля> ]

LANGUAGE 'plpgsql' | 'C' | 'internal'

Вызов созданной функции осуществляется из оператора SELECT (так же, как вызываются функции агрегирования)

SELECT <имя_функции> ([<параметр1>,<параметр2>,...])

  1. Безопасность и авторизация пользователей в SQL. Понятие транзакций. Уровни изоляции. Проблема отката (rollback) результатов выполнения транзакций.