- •Общая характеристика субд Access. Создание и редактирование базы данных средствами субд Access. Свойства реляционной таблицы. Отношения между таблицами.
- •9Структуру стандарта sql.Типы данных и операции , агрегирующие функции. Примеры.
- •19 Администрирование бд и управление объектами. Разграничение доступа. Привилегии, роли
- •20 Управл парал-ной обработкой данных. Блокировки
- •13 Общая концепция субд Oracle
- •15.Курсоры , их атрибуты. Использования цикла for при работе с курсорами.
- •18.Триггеры.Объявление, назначение и примеры использования. Модификация триггеров.
- •16.Обработка исключений.Пользовательские исключения.Возбуждение исключений.
- •Возбуждение исключений
- •3. По аналогии с левым можно определить правое внешнее соединение. Перепишем предыдущий пример с использованием его возможностей:
- •Модификация данных
- •Модификация объектов базы данных
- •Создание таблиц. Ограничения
- •Последовательности
- •Модификация и удаление таблиц
- •Представления
- •14. Язык pl/sql. Основные типы данных и операторы
- •Структура программы
- •Идентификаторы и описания переменных
- •Типы данных
- •Процедурные операторы
- •Особенности записи операторов sql
- •17.Подпрограммы. Хранимые подпрограммы. Пакеты.
- •Хранимые подпрограммы
15.Курсоры , их атрибуты. Использования цикла for при работе с курсорами.
Конструкция PL/SQL, называемая курсором, позволяет дать имя некоторой рабочей области, данные в которую будут помещаться операторами SQL. Имеются 2 типа курсоров: неявные и явные. PL/SQL неявно объявляет курсор для всех DML–утверждений языка SQL, включая запросы, возвращающие ровно одну строку.
Курсор может быть явно объявлен с помощью оператора
DECLARE
CURSOR имякурсора [(параметрыкурсора)]IS операторSelect;
Имя курсора - это необъявленный ранее идентификатор, а не переменная PL/SQL; его можно использовать только для обращения к запросу. Нельзя присваивать значений имени курсора или использовать его в выражениях.
Курсор может иметь параметры. Параметры описываются так же, как параметры любой процедуры или функции PL/SQL, а их конкретные значения задаются в момент открытия курсора.
После объявления курсора над ним можно выполнять следующие операции:
открытие (OPEN). Открытие курсора предложением OPEN исполняет предложение SELECT и идентифицирует активное множество, т.е. все строки, удовлетворяющие поисковым условиям запроса
выбор очередной строки (FETCH). Предложение FETCH извлекает очередную строку из активного множества. При каждом выполнении FETCH курсор продвигается к следующей строке в активном множестве. Рассмотрим формат предложения FETCH:
FETCH имякурсора INTO списокпеременных;
закрытие курсора (CLOSE). Предложение CLOSE деактивирует курсор, и активное множество становится неопределенным.
Атрибуты курсора
Каждый курсор, явно объявленный , имеет четыре атрибута: %NOTFOUND, %FOUND, %ROWCOUNT и %ISOPEN.
Использование %NOTFOUND. Когда курсор открыт, строки, удовлетворяющие ассоциированному запросу, идентифицированы и образуют активное множество. Эти строки извлекаются операцией FETCH по одной за раз. Если последняя операция FETCH вернула строку, %NOTFOUND дает FALSE. Если последняя операция FETCH не смогла вернуть строку (так как активное множество исчерпано), %NOTFOUND дает TRUE. Операция FETCH должна в конце концов исчерпать активное множество, так что, когда это происходит, никакого исключения не возбуждается.
Использование %FOUND. %FOUND логически противоположен атрибуту %NOTFOUND. После открытия явного курсора, но до первой операции FETCH, %FOUND дает NULL. Впоследствии он дает TRUE, если последняя операция FETCH вернула строку, или FALSE, если последняя операция FETCH не смогла извлечь строку, так как больше нет доступных строк.
Использование %ROWCOUNT. Когда вы открываете курсор, его атрибут %ROWCOUNT обнуляется. Перед первой операцией FETCH %ROWCOUNT возвращает 0. Впоследствии, %ROWCOUNT возвращает число строк, извлеченных операциями FETCH из активного множества на данный момент. Это число увеличивается, если последняя операция FETCH вернула строку.
Использование %ISOPEN. %ISOPEN дает TRUE, если явный курсор открыт, и FALSE в противном случае.
Атрибуты неявных курсоров
Oracle неявно открывает курсор для обработки каждого предложения SQL, не ассоциированного с явно объявленным курсором. PL/SQL позволяет обращаться к последнему открытому неявному курсору через имя "SQL".
Как и явный, неявный курсор SQL имеет атрибуты %NOTFOUND, %FOUND, %ROWCOUNT . Эти атрибуты, присоединяемые к имени курсора ("SQL"), дают доступ к информации о выполнении предложений INSERT, UPDATE, DELETE и однострочных предложений SELECT INTO. Использовать атрибуты неявного курсора можно только в процедурных предложениях, но не в предложениях SQL. Пока ORACLE автоматически не открыл неявный курсор, т.е. не выполнил оператор SQL, все его атрибуты возвращают NULL.
Работа с атрибутами неявного курсора подобна работе с явными курсорами, за исключением атрибутов для оператора SELECT. В блоках PL/SQL оператор SELECT может применяться только в форме SELECT … INTO, предусматривающей возврат ровно одной строки. Если возвращаемое число строк не равно единице, возбуждается исключение. Так, если предложение SELECT … INTO не возвращает ни одной строки, возбуждается предопределенное исключение NO_DATA_FOUND, независимо от того, проверяете ли вы %NOTFOUND в следующей строке или нет. Однако, предложение SELECT … INTO, использующее вызов групповой функции SQL, никогда не возбуждает исключение NO_DATA_FOUND. ,если предложение SELECT … INTO возвращает более одной строки, возбуждается предопределенное исключение TOO_MANY_ROWS. Значение атрибута %ROWCOUNT при этом остается равным 1.
Использование цикла FOR для работы с курсорами
В большинстве ситуаций, требующих использования курсора, вы можете использовать курсорный цикл FOR, чтобы упростить кодирование. Курсорный цикл FOR -неявно объявляет свой индекс цикла как запись типа %ROWTYPE;
открывает курсор;
в цикле извлекает строки из активного множества в поля записи;
закрывает курсор, когда все строки обработаны или когда вы выходите из цикла (в том числе и принудительно, с помощью EXIT или GOTO, или когда внутри цикла возбуждается исключение).
Как и в других циклах FOR, область видимости переменной - индекса цикла ограничена этим циклом.
Формат цикла FOR для работы с курсорами следующий:
FOR индексцикла IN курсор | операторSELECT LOOP
…
END LOOP