Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры по субд Крупская.doc
Скачиваний:
57
Добавлен:
15.06.2014
Размер:
2 Мб
Скачать
☆

57 Записи pl/sql. Использование %rowtype

ЗАПИСИ

Тип записи (record type) — это группа связанных полей, каждое из которых имеет свои собственные имя и тип данных. Тип записи обычно используется в программах PL/SQL для создания переменных, соответствующих всем столбцам таблицы или их подмножеству. Например, в следующем фрагменте программы тип записи, определяемый пользователем, объявляется для соответствия атрибутам таблицы базы данных, а затем с применением нового типа объявляется переменная.

declare

tуре part_record is record (id integer,

unit_price number(10,2),

description varchar2(200));

current_part part_record;

В программах PL/SQLудобно пользоваться атрибутом %ROWTYPEдля того, чтобы в процессе выполнения программы объявлять переменные, имеющие тип записи, и другие конструкции Например, в следующем фрагменте программы показано, как использование атрибута %ROWTYPEможет упростить объявление вложенной таблицыCURRENT_PARTS_TABLE.

declare

type parts_table is table of sales.parts %rowtype;

current_parts_table parts_table;

58 Курсорные типы, переменные и выражения. Виды и назначение курсоров.

Курсор - указатель на текущую строку результирующего множества оператора (рабочей области).

Для курсоров установлен ряд ограничений. К примеру, программа PL/SQL не может передавать курсор другой программе в качестве параметра – открывать курсор и обрабатывать соответствующую информацию можно только непосредственно в самой программе. Работая с курсором и учитывая его функциональные ограничения, можно объявлять в программе курсорные типы (cursor types), определяемые пользователями, и соответствующие курсорные переменные (cursor variables).

типы курсоров:

* Неявный,

* Явный

Неявные Курсоры

Неявный курсор управляется автоматически, прозрачно для Вас. В процессе выполнения, курсор открывается, из него выбираются данные и закрывается, все за один шаг. Неявные курсоры используются только в том случае, если надо возвратить единственную строку из таблицы.

Явные Курсоры

Явные курсоры используются, когда ожидается, что запрос может вернуть как ни одной, так и много строк. Он же позволяет выполнить сложные действия (логику) при выборке каждой строки. Управление явными курсорами осуществляет программист. Это означает, что Вы осуществляете открытие, извлечение данных и закрытие (OPEN, FETCH, CLOSE) курсора. При использовании явных курсоров можно выделить 4 основных этапа:

1. Объявление курсора. 2. Открытие (OPEN) курсора. 3. Извлечение (FETCH) данных из курсора один или более раз. 4. Закрытие (CLOSE) курсор

Также бывают: параметризированные и не параметризированные, строгие и нестрогие

Атрибуты Курсора

Курсоры имеют (4) атрибуты:

* FOUND Строка успешно извлечена? (TRUE/FALSE)

* NOTFOUND Строка не извлечена? (TRUE/FALSE)

* ISOPEN Курсор открыт? (TRUE/FALSE)

* ROWCOUNT Количество извлеченных строк

59 Обработка явных и неявных курсоров.

Для обработки явного курсора в PL/SQL необходимо выполнить четыре действия:

1. Объявить курсор.

2. Открыть курсор для запроса.

3. Выбрать результаты в переменные PL/SQL.

4. Закрыть курсор.

Объявление курсора является единственным действием, которое выполняется в разделе объявлений блока. Другие три действия производятся в выполняемом разделе или в разделе исключительных ситуаций.

Объявление курсора. При объявлении курсора ему назначается имя и ставится в соответствие некоторый оператор SELECT. Синтаксис объявления курсора: CURSORимя_курсора ISonepamop_SELECT

Открытие курсора. Курсор открывается следующим образом: OPENимя_курсора;

Когда курсор открывается, происходит следующее:

• Анализируются значения переменных привязки.

• На основе значений переменных привязки и содержимого таблиц,

к которым обращается запрос, определяется активный набор.

• Указатель активного набора устанавливается на первую строку.

Считывание строи из курсора. Предложение INTO запроса является частью оператора FETCH. Оператор FETCH имеет две формы:

FETCH имя_курсора INTOсписок_переменных;

FETCH имя._курсора INTOзanuсь PL/SQL;

Закрытие курсора. После того как весь активный набор выбран, курсор следует закрыть. Это сообщает PL/SQL, что программа закончила работу с курсором и отведенные для него ресурсы могут быть освобождены. В состав этих ресурсов, входит пространство для хранения активного набора, а также временное пространство, используемое для определения активного набора. Синтаксис закрытия курсора: CLOSEимя_курсора;

После закрытия курсора считывать из него строки нельзя.

Обработка неявных курсоров

Как говорилось в предыдущем разделе, явные курсоры используются для обработки тех операторов SELECT, которые возвращают более одной строки. Однако каждый оператор SQL выполняется в пределах контекстной области и поэтому имеет курсор, указывающий на конкретную контекстную область. Такой курсор называется SQL- курсором. В отличие от явных курсоров, SQL-курсор не открывается и не закрывается программой. PL/SQL неявно открывает SQL-курсор, обрабатывает SQL-оператор и затем закрывает этот курсор.

Неявные курсоры используются для обработки операторов INSERT, UPDATE, DELETE, а также однострочных операторов SELECT...INTO. SQL-курсор открывается и закрывается PL/SQL, поэтому команды OPEN, FETCH и CLOSE не нужны. Однако для SQL-курсоров можно применять курсорные атрибуты. Например, ниже приводится блок, в котором оператор INSERT выполняется в том случае, если оператору UPDATE не соответствует ни одной строки.

Курсорные циклы FOR

Курсорный цикл FOR - итеративная конструкция, которая позволяет использовать OPEN, FETCH, CLOSE курсор в пределах цикла. Он позволяет выполнять операции над каждой строкой, выбранной в цикле. Обычно он используется, когда Вы собираетесь обрабатывать каждую строку, которую он возвращает. Если Вам нужно прервать цикл преждевременно, используйте явные курсоры (с их большим управлением).

  1. Использование SQL в PL/SQL. Понятие привязки.

Из всех SQL-операторов в программахPL/SQLнапрямую можно использовать лишь операторыDMLи операторы управления транзакциями. ОператорыDDL–использовать нельзя. Чтобы пояснить смысл этих ограничений, рассмотрим принципы создания программPL/SQL.

В любом языке программирования привязка переменных может быть либо ранней, либо поздней. Привязка(binding) переменной–это процесс указания области памяти, соответствующей некоторому идентификатору программы. ВPL/SQLв процесс привязки входит также проверка базы данных на наличие полномочий, позволяющих обращаться к объектам схем. В том языке, где используетсяранняя привязка(early binding), этот процесс осуществляется на этапе компиляции программы, а в языке, где применяетсяпоздняя привязка(late binding), она откладывается до времени выполнения программы. Ранняя привязка означает, что этап компиляции программы будет занимать большее время (так как при этом нужно привязывать переменные), однако выполняться программа будет быстрее, поскольку к этому моменту привязка будет завершена. Таким образом, поздняя привязка сокращает время компиляции, но увеличивает время выполнения программы.

При разработке PL/SQL было принято решение об использовании ранней привязки, чтобы объекты базы данных к моменту выполнения блока были уже проверены, и чтобы блок мог быть выполнен максимально быстро. Это вполне оправданно, так как блоки PL/SQL можно хранить в базе данных как процедуры, функции, модули и триггеры. Такие объекты хранятся в скомпилированном виде, то есть при необходимости их можно загрузить из базы данных и выполнить. Именно поэтому операторы DDL использовать нельзя. Оператор DDL модифицирует объект базы данных, следовательно, полномочия на объект должны быть подтверждены вновь. Процесс подтверждения полномочий требует привязки идентификаторов, а это уже было сделано во время компиляции.

Операторы DMLи операторы управления транзакциями–это единственные операторы, с помощью которых нельзя модифицировать объекты схем или полномочия на объекты схем, поэтому вPL/SQLмогут использоваться только они.