- •1. Основные понятия баз данных. Этапы развития субд. Функции, требования к субд.
- •2. Архитектура баз данных. Логическая и физическая независимость данных. Схема прохождения запросов к бд. Классификация моделей данных. Архитектура и модели "клиент-сервер" в технологии бд.
- •3. Реляционная модель бд, ее основные достоинства. Таблица, кортеж, атрибут, домен, первичный ключ, внешний ключ. Фундаментальные свойства отношений. Обеспечение целостности данных.
- •4. Основы реляционной алгебры. Операторы реляционной алгебры. Понятия полной, транзитивной, функциональной зависимостей. Нормализация, третья нормальная форма, шаги нормализации.
- •5. Модель «объект-свойство-отношение», er-диаграммы, проектирование схемы баз данных.
- •6. Язык sql, его структура, стандарты, история развития. Подмножество языка dml: операторы select, insert, update, delete.
- •7. Подмножество языка ddl: операторы create, alter, drop. Представления, их значение; обновляемые представления.
- •8. Подмножество языка dcl: операторы grant, revoke. Системные привилегии, привилегии на объекты, роли.
- •9. Транзакции, операторы управления транзакциями: commit, rollback, savepoint; журнал транзакций, уровни блокировок.
- •10. Pl/sql, структура, основные операторы.
- •11. Курсоры, операторы работы с курсором, оператор select into.
- •12. Процедуры, функции, пакеты.
- •13. Триггеры, их основные свойства и значение.
- •14. Параллельные архитектуры бд; масштабируемость, надежность, производительность.
- •15. Распределенные базы данных, фрагментация, тиражирование.
- •16. Средства защиты данных в субд.
- •17. Шлюзы к базам данных. Архитектура odbc. Www-интерфейс к бд.
- •18. Объектная модель данных.
- •19. Объектно-ориентированные и объектно-реляционные бд.
- •20. Эволюция технологий и возможностей субд oracle (oracle 8i, oracle 9i, oracle 10g).
- •21. Перспективы развития бд.
11. Курсоры, операторы работы с курсором, оператор select into.
В зависимости от числа строк, возвращаемых запросом, используется один из методов.
Когда возвращ. 1 строка — Select … into … . #:
Select OrderDate into ResultDate from Orders
Where Order_ID=453;
Когда возвращ. 1 или больше строк — курсор.
Курсор — указатель на набор записей, полученный в результате выполнения связанного с ним оператора Select. Назначение: выполнение и обработка запросов, возвращающих более одной строки.
Курсоры могут объявляться явно и неявно.
Курсор, как и переменная, объявляется в секции объявлений базового блока. Синтаксис:
Cursor <имя_курсора> [(<параметр1> [,<параметр2>, …])]
[Return <спецификация_возврата>]
is
Select
[for Update
[of <таблица_или_столбец1>
[, <таблица_или_столбец2>, …]
]
]
Параметры курсора явл. входными. Значения переданных параметров могут исп. в разделе Where связанного с курсором оператора Select.
Явное объявление курсора производится в секции Declare, причем указанный в определении SQL-оператор может содержать команды Select.
Команды Insert, Update, Delete здесь не допускаются. Явные курсоры используются для обработки операторов, кот. возвращают более 1 строки.
Для обработки явного курсора в PL/SQL необходимо выполнить 4 шага:
объявление курсора;
открытик курсора оператором Open;
выборка данных оператором Fetch;
закрытие курсора оператором Close;
При открытии оператором Open курсор выполняет связанный с ним оператор Select. Если он возвращает непустой набор записей, курсор автоматически указывает на первую строку в наборе.
Каждая команда Fetch перемещает данные из курсора в указанные переменные, после чего перемещает указатель на следующую запись в наборе записей, возвращенным оператором Select. Если записей больше нет, указатель все время будет указывать на последнюю запись, а атрибуты курсора %Found и %NotFound становятся равными, соответственно, False и True соответственно.
При выполнении оператора Close курсор закрывается. При этом освобождаются все ресурсы, занятые во время открытия курсора.
Курсор имеет ряд индикаторов, показывающих его состояние. Они называются атрибутами курсора.
имя_курсора%IsOpen |
Проверяет, открыт ли курсор. Возвращается значение True, если открыт. |
имя_курсора%RowCount |
Номер строки в наборе данных, на кот. указ. курсор. |
имя_курсора%Found |
Проверяет, была ли успешной последняя попытка получения записи из курсора. Если успешна, возвращ. True. |
имя_курсора%NotFound |
Противоположен атрибуту Found. Если записей больше не найдено, возвращ. True. |
Неявные курсоры используются для обработки операторов Insert, Update, Delete, а также однострочных операторов Select … into.
Оператор Select указывается в теле блока, и PL/SQL берет на себя всю заботу об определении курсора, выполняя соответствующие действия неявно.
Каждый оператор Select имеет курсор, указ. на конкретную контекстную область, т. к. выполняется в пределах контекстной области. Такой курсор называется SQL-курсором. Он неявно открывается, обрабатывается SQL-оператор и закрывается, поэтому команды Open, Fetch, Close не нужны.
Обработка записей из курсора обычно выполняется в цикле. При написании такого цикла обычно производится проверка, была ли найдена хотя бы одна запись (проверяется состояние атрибутов %Found или %NotFound). Если да, то можно продолжить ее обработку. Иначе следует выйти из цикла.
# вывода пронумерованного списка менеджеров:
Declare
Cursor ShowMng is — Объявление курсора.
Select * from managers;
m Managers%RowType; — Объявление временной переменной для хранения текущей строки курсора.
Begin
Open ShowMng; — Открытие курсора.
Fetch ShowMng into m; — Выборка первой записи.
While ShowMng%Found Loop — Продолжать цикл, пока курсор указывает на необработанную запись.
dbms_output.put_line(to_char(ShowMng%RowCount)||’ ’||m.Name);
Fetch ShowMng into m; — Выбрать след. запись.
End Loop; — Конец цикла.
Close ShowMng; — Закрытие курсора.
End; — Конец блока (курсора).
Этот # можно реализовать, используя курсорный цикл For. При этом открытие, выборка и закрытие курсора будет происходить без участия пользователя.
Синтаксис курсорного цикла For:
For <запись_курсора> in <имя_курсора> [(<параметр1> [, <параметр2>,…])] Loop
<операторы>;
End Loop;
Этот цикл выбирает записи из курсора в переменную запись_курсора. Поля записи_курсора можно использовать для доступа к данным из операторов PL/SQL, выполняемых в цикле. Когда все записи выбраны, цикл завершается.
Declare
Cursor ShowMng is
Select * from Managers;
Begin
For m in ShowMng Loop
dbms_output.put_line(to_char(ShowMng%RowCount)||’ ’||m.Name);
End Loop;
End;