Ограничение возвращаемых строк

CASE-средство ERWin

ERWin имеет два уровня представления модели - логический и физический. Логический уровень - это абстрактный взгляд на данные, на нем данные представляются так, как выглядят в реальном мире, и могут называться так, как они называются в реальном мире, например "Постоянный клиент", "Отдел" или "Фамилия сотрудника". Объекты модели, представляемые на логическом уровне, называются сущностями и атрибутами (подробнее о сущностях и атрибутах будет рассказано ниже). Логическая модель данных может быть построена на основе другой логической модели, например на основе модели процессов. Логическая модель данных является универсальной и никак не связана с конкретной реализацией СУБД.

Физическая модель данных, напротив, зависит от конкретной СУБД, фактически являясь отображением системного каталога. В физической модели содержится информация о всех объектах БД. Поскольку стандартов на объекты БД не существует (например, нет стандарта на типы данных), физическая модель зависит от конкретной реализации СУБД. Следовательно, одной и той же логической модели могут соответствовать несколько разных физических моделей. Если в логической модели не имеет значения, какой конкретно тип данных имеет атрибут, то в физической модели важно описать всю информацию о конкретных физических объектах - таблицах, колонках, индексах, процедурах и т. д. Разделение модели данных на логические и физические позволяет решить несколько важных задач.

13)Что включает в себя диаграмма сущность-связь?

Диаграмма сущность-связь представляет собой модель данных верхнего уровня. Она включает сущности и взаимосвязи, отражающие основные бизнес-правила предметной области. Такая диаграмма не слишком детализирована, в нее включаются основные сущности и связи между ними, которые удовлетворяют основным требованиям, предъявляемым к ИС. Диаграмма сущность-связь может включать связи многие-ко-многим и не включать описание ключей. Как правило, ERD используется для презентаций и обсуждения структуры данных с экспертами предметной области.

14.Что включает в себя модель данных, основанная на ключах?

Модель данных, основанная на ключах, - более подробное представление данных. Она включает описание всех сущностей и первичных ключей и предназначена для представления структуры данных и ключей, которые соответствуют предметной области.

15.Какую информацию содержит трансформационная модель? Что включает в себя полная атрибутивная модель?

Физическая модель содержит всю информацию, необходимую для реализации конкретной БД. Трансформационная модель содержит информацию для реализации отдельного проекта, который может быть частью общей ИС и описывать подмножество предметной области. ERWin поддерживает ведение отдельных проектов, позволяя проектировщику выделять подмножество модели в виде предметных областей (Subject Area). Трансформационная модель позволяет проектировщикам и администраторам БД лучше представлять, какие объекты БД хранятся в словаре данных, и проверить, насколько физическая модель данных удовлетворяет требованиям к ИС.

Полная атрибутивная модель - наиболее детальное представление структуры данных: представляет данные в третьей нормальной форме и включает все сущности, атрибуты и связи.

 

16) Назовите виды связей на ER-диаграммах. Назовите элементы ER-диаграмм. Цель создания ER-диаграмм?

Связь является логическим соотношением между сущностями. Каждая связь должна именоваться глаголом или глагольной фразой (Relationship Verb Phrases). Имя связи выражает некоторое ограничение или бизнес-правило и облегчает чтение диаграммы.

На логическом уровне можно установить идентифицирующую связь один-ко-многим, связь многие-ко-многим и неидентифицирующую связь один-ко-многим.

Тип сущности определяется ее связью с другими сущностями. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. Зависимая сущность изображается прямоугольником со скругленными углами. . При установлении идентифицирующей связи атрибуты первичного ключа родительской сущности автоматически переносятся в состав первичного ключа дочерней сущности. Эта операция дополнения атрибутов дочерней сущности при создании связи называется миграцией атрибутов. В дочерней сущности новые атрибуты помечаются как внешний ключ.

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

Идентифицирующая связь показывается на диаграмме сплошной линией с жирной точкой на дочернем конце связи, неидентифицирующая – пунктирной.

Основные компоненты диаграммы ERWin - это сущности, атрибуты и связи. Каждая сущность является множеством подобных индивидуальных объектов, называемых экземплярами. Каждый экземпляр индивидуален и должен отличаться от всех остальных экземпляров. Атрибут выражает определенное свойство объекта. С точки зрения БД (физическая модель) сущности соответствует таблица, экземпляру сущности - строка в таблице, а атрибуту - колонка таблицы.

Построение модели данных предполагает определение сущностей и атрибутов, т. е. необходимо определить, какая информация будет храниться в конкретной сущности или атрибуте. Сущность можно определить как объект, событие или концепцию, информация о которых должна сохраняться. Сущности должны иметь наименование с четким смысловым значением, именоваться существительным в единственном числе, не носить "технических" наименований и быть достаточно важными для того, чтобы их моделировать. Именование сущности в единственном числе облегчает в дальнейшем чтение модели. Фактически имя сущности дается по имени ее экземпляра.

Цель создания - Визуальное моделирование повышает качество создаваемой базы данных, продуктивность и скорость её разработки

17) Как правильно именовать сущности ER-диаграммы? Какие существуют типы логической связи между сущностями?

Связь является логическим соотношением между сущностями. Каждая связь должна именоваться глаголом или глагольной фразой (Relationship Verb Phrases). Имя связи выражает некоторое ограничение или бизнес-правило и облегчает чтение диаграммы.На логическом уровне можно установить идентифицирующую связь один-ко-многим, связь многие-ко-многим и неидентифицирующую связь один-ко-многим.Тип сущности определяется ее связью с другими сущностями. Идентифицирующая связь устанавливается между независимой (родительский конец связи) и зависимой (дочерний конец связи) сущностями. Зависимая сущность изображается прямоугольником со скругленными углами. . При установлении идентифицирующей связи атрибуты первичного ключа родительской сущности автоматически переносятся в состав первичного ключа дочерней сущности. Эта операция дополнения атрибутов дочерней сущности при создании связи называется миграцией атрибутов. В дочерней сущности новые атрибуты помечаются как внешний ключ.При установлении неидентифицирующей связи дочерняя сущность остается независимой, а атрибуты первичного ключа родительской сущности мигрируют в состав неключевых компонентов родительской сущности. Неидентифицирующая связь служит для связывания независимых сущностей.Идентифицирующая связь показывается на диаграмме сплошной линией с жирной точкой на дочернем конце связи, неидентифицирующая – пунктирной.Основные компоненты диаграммы ERWin - это сущности, атрибуты и связи. Каждая сущность является множеством подобных индивидуальных объектов, называемых экземплярами. Каждый экземпляр индивидуален и должен отличаться от всех остальных экземпляров. Атрибут выражает определенное свойство объекта. С точки зрения БД (физическая модель) сущности соответствует таблица, экземпляру сущности - строка в таблице, а атрибуту - колонка таблицы.Построение модели данных предполагает определение сущностей и атрибутов, т. е. необходимо определить, какая информация будет храниться в конкретной сущности или атрибуте. Сущность можно определить как объект, событие или концепцию, информация о которых должна сохраняться. Сущности должны иметь наименование с четким смысловым значением, именоваться существительным в единственном числе, не носить "технических" наименований и быть достаточно важными для того, чтобы их моделировать. Именование сущности в единственном числе облегчает в дальнейшем чтение модели. Фактически имя сущности дается по имени ее экземпляра.Цель создания - Визуальное моделирование повышает качество создаваемой базы данных, продуктивность и скорость её разработки

18) Что такое первичный ключ сущности? Что называется альтернативным ключом сущности? В каком случае образуются внешние ключи?

Первичный ключ (primary key) - это атрибут или группа атрибутов, однозначно идентифицирующая экземпляр сущности. Атрибуты первичного ключа на диаграмме не требуют специального обозначения - это те атрибуты, которые находятся в списке атрибутов выше горизонтальной линии.

Выбор первичного ключа может оказаться непростой задачей, решение которой может повлиять на эффективность будущей ИС. В одной сущности могут оказаться несколько атрибутов или наборов атрибутов, претендующих на роль первичного ключа. Такие претенденты называютсяпотенциальными ключами (candidate key).

Ключи могут бытьсложными, т. е. содержащими несколько атрибутов. Сложные первичные ключи не требуют специального обозначения - это список атрибутов выше горизонтальной линии:"

Внешние ключи (Foreign Key) создаются автоматически, когда связь соединяет сущности: связь образует ссылку на атрибуты первичного ключа в дочерней сущности и эти атрибуты образуют внешний ключ в дочерней сущности (миграция ключа). Атрибуты внешнего ключа обозначаются символом (FK) после своего имени.

Зависимая сущность может иметь один и тот же внешний ключ из нескольких родительских сущностей.

19) Что называется процессом нормализации?

Нормализация данных.Нормализация - процесс проверки и реорганизации сущностей и атрибутов с целью удовлетворения требований к реляционной модели данных. Нормализация позволяет быть уверенным, что каждый атрибут определен для своей сущности, значительно сократить объем памяти для хранения информации и устранить аномалии в организации хранения данных. В результате проведения нормализации должна быть создана структура данных, при которой информация о каждом факте хранится только в одном месте. Процесс нормализации сводится к последовательному приведению структуры данных к нормальным формам - формализованным требованиям к организации данных. Известны шесть нормальных форм:

- первая нормальная форма (1NF);

- вторая нормальная форма (2NF);

- третья нормальная форма (3NF);

- нормальная форма Бойса - Кодда (усиленная 3NF);

- четвертая нормальная форма (4NF);

- пятая нормальная форма (5NF).

Денормализация. В результате нормализации все взаимосвязи данных становятся правильно определены, исключаются аномалии при оперировании с данными, модель данных становится легче поддерживать. Однако часто нормализация данных не ведет к повышению производительности ИС в целом.

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

20) Дайте определение первой нормальной формы.

Таблица находится в первой нормальной форме, если каждый её атрибут атомарен. Под выражением «атрибут атомарен» понимается, что атрибут может содержать только одно значение. Таким образом, не существует 1NF таблицы, в полях которых могут храниться списки значений. Для приведения таблицы к 1NF обычно требуется разбить таблицу на несколько отдельных таблиц.

вопрос об атомарности атрибутов решается на основе семантики данных, то есть их смыслового значения. Атрибут атомарен, если его значение теряет смысл при любом разбиении на части или переупорядочивании. И наоборот, если какой-либо способ разбиения на части не лишает атрибут смысла, то атрибут неатомарен.

Одно и то же значение может быть атомарным или неатомарным в зависимости от смысла этого значения. Например, значение «4286» является

24.ЭКЗЕМПЛЯР ORACLE

Экземпляр Oracle состоит из процессов и разделяемой памяти, необходимой для доступа к информации в БД. Если копнуть чуть глубже, то экземпляр составляют пользовательские процессы, фоновые процессы Oracle и разделяемая область памяти, которую используют все эти процессы.

Что же представляет собой разделяемая память (shared memory)? Oracle использует разделяемую память в разных целях: как кэширование данных и индексов, так и хранение программного кода. Разделяемая память делится на несколько частей (или структур памяти). Основными структурами памяти Oracle являются Системная Глобальная Область (System Global Area или SGA) и Программная Глобальная Область (Program Global Area или PGA). Рассмотрим SGA и PGA более подробно.

Системная Глобальная Область (SGA)

SGA – это область разделяемой памяти, которую Oracle использует для хранения данных и управляющей информации одного конкретного экземпляра Oracle. SGA размещается в памяти при запуске экземпляра Oracle и освобождает память при останове. Каждый запущенный экземпляр Oracle имеет свою собственную SGA. Информация в SGA состоит из следующих компонентов (каждый из которых создается в памяти при запуске экземпляра):

кэш буферов БД – здесь хранятся последние открытые блоки данных. Эти блоки могут содержать данные, которые изменились, но еще не были записаны на диск (грязные блоки); данные, которые не изменялись либо были записаны на диск после изменения (чистые блоки). Так как кэш буферов БД хранит блоки данных на основе алгоритма последних используемых блоков, то наиболее активно используемые блоки постоянно остаются в памяти (тем самым, снижая дисковый ввод/вывод и увеличивая производительность системы).

 

25 Фоновые процессы в СУБД?В процессе работы сервер, одновременно работает с тысячами или даже более записями в таблицах, БД. Проводит выборки данных, по запросам пользователей, изменяет и удаляет данные. Для того, чтобы весь этот комплекс работал стабильно и без сбоев, вся работа делиться между несколькими вспомогательными программами, которые действуют независимо одна от другой. В совокупности эти программы называются фоновыми процессами сервера Oracle. Сразу заметим, что для платформы Windows NT фоновые процессы реализованы как потоки к сервисам Oracle. Это позволяет более эффективно использовать адресное пространство памяти общего пользования. Итак к фоновым процессам относятся следующие:

1. SMON - PMON

2. DBWR

3. LGWR

4. Dnnn

5. ARCH

6. CKPT

7. RECO

8. SPNn

9. LCKn

10. Pnnn

11. Snnn

Так же есть процессы User и Server выполняющие обработку транзакций, конечного пользователя БД. Рассмотрим их, более подробно. Процессы SMON, PMON это процессы мониторов БД. PMON - (Process Monitor) это процесс, который осуществляет контроль за состоянием подключений к БД. Если по какой-либо причине пользователь потерял контакт с БД, не завершив работы корректно PMON выполнит автоматическую "уборку" (нечто вроде сборщика мусора в языках программирования). Эта "уборка" предусматривает удаление сеанса, закрепленного за прекратившимся процессом, блокировок, которые были им установлены и непринятых транзакций. Так же он освободит ресурсы SGA. Так же PMON следит за процессами сервера и диспетчера и автоматически перезапускает их в случае останова. SMON - чуть более скромен, но так же немаловажен. После запуска БД, он как это не грандиозно звучит, выполняет автоматическое восстановление экземпляра. В случае если у вас отключили свет и сервер успел "слопать" УПС! У меня такие случаи были и пока я выходил сухим из воды! (постучать по дереву). :) Кроме того, он следит за сегментами БД, фиксирует освобождение пространства во временных сегментах и автоматически объединяет их. Так же заметим, что объединение блоков в табличных пространствах, производится при условии, если параметр pctincrease равен 0. Этот параметр, используется при создании табличных пространств. Процессы SMON, PMON должны быть запущены при старте БД, иначе она не будет функционировать. Вот так работают SMON и PMON.

27) Какие сущ-т правила присвоения имён обектам БД?

правила присвоения имен

длина от 1 до 30 символов, кроме имён баз данных – 8 символов, и имён ссылок – 128байт

нельзя использовать зарезервированные имена

Должно начинаться с буквы, должны иметь только буквы, цифры, $ # _

Не должно быть одинаковых имён

VARCHAR2

VARCHAR2 используется, чтобы хранитьпеременные строки символов длины. Длина ценности вереницы{нити} будет сохранена на диске с ценностью непосредственно

 

31.Язык определения данных (DDL)?

Инструкции языка определения данных (DDL —Data Definition Language) имеют вид, несколько непривычный для пользователей баз данных Microsoft Access. Это и неудивительно, ведь все конструкции этой части языка SQL предназначены для работы в приложениях, основанных на клиент-серверной архитектуре.

К языку определения данных относятся инструкции CREATE TABLE, CREATE INDEX, CREATE PROCEDURE, CREATE USER, CREATE GROUP, CREATE VIEW, ADD USER, DROP USER, DROP GROUP, ALTER TABLE, ALTER USER, ALTER DATABASE, DROP, GRANT, REVOKE и предложение CONSTRAINT.

В этом разделе приводится описание только синтаксиса соответствующих конструкций. Поскольку все инструкции языка определения данных (DDL) используются в клиент-серверных приложениях, которые будут обсуждаться в Части IV, то в этом разделе не приведено ни одного примера. После изучения Части IV вы сможете сами поэкспериментировать с вариантами создания баз данных, таблиц, индексов, процедур и других конструкций клиент-серверных приложений. Здесь приведен полный синтаксис инструкций языка определения данных исключительно для полноты изложения.

32.Язык манипулирования данными SQL?

<Оператор закрытия> (<close statement>)

Функция

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

Формат

<close statement>::=

CLOSE <cursor name>

Синтаксические правила

Объемлющий модуль должен содержать объявление курсора, в котором используется это же имя курсора.

Общие правила

Курсор должен быть в открытом состоянии.

Курсор переводится в закрытое состояние и разрушается копия <спецификации курсора> (<cursor soecificaton>).

<Оператор фиксации> (<commit statement>)

Функция

Заканчивает текущую транзакцию с фиксацией.

Формат

<commit statement>::=

COMMIT WORK

Текущая транзакция завершается.

Закрываются любые курсоры, открытые данной транзакцией.

Любые изменения базы данных, сделанные в текущей транзакции, фиксируются.

8.3. <Объявление курсора> (<declare cursor>)

Функция

Определяет курсор.

Формат

Синтаксические правила

<Имя курсора> (<cursor name>) не должно быть идентичным любому другому <имени курсора> (<cursor name>), специфицируемого в каком-либо другом <объявлении курсора> (<declare cursor>) того же модуля.

Любое <имя параметра> (<parameter name>), содержащееся в <спецификации курсора> (<cursor specification>), должно быть определено в <объявлении параметра> (<paremeter declaration>) <процедуры> (<procedure>) объемлющего <модуля> (<module>), который содержит <оператор открытия> (<open statement>), специфицирующий это <имя курсора> (<cursor name>).

33. Выборка данных из базы данных? Синтаксис, ограничения запросов?

SELECT — оператор языка SQL, возвращающий набор данных (выборку) из базы.

Он используется для выборки нуля или более строк из одной или нескольких таблиц, хранимых процедур, представлений БД. В большинстве приложений SELECT является наиболее часто используемым оператором DML. При формировании запроса SELECT пользователь описывает ожидаемый набор данных, но не указывает, какие физические операции должны быть произведены для получения этого набора. Определение для запроса оптимального плана является задачей СУБД, а точнее — оптимизатора.

Оператор SELECT имеет следующую структуру:

SELECT

[DISTINCT | DISTINCTROW | ALL]

select_expression,...

[FROM table_references

[WHERE where_definition]

[GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

[HAVING where_definition]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC], ...]

Формат запроса с использованием данного оператора:

SELECT список полей FROM список таблиц WHERE условия…

Основные ключевые слова, относящиеся к запросу SELECT:

· WHERE — используется для определения, какие строки должны быть выбраны или включены в GROUP BY.

· GROUP BY — используется для объединения строк с общими значениями в элементы меньшего набора строк.

· HAVING — используется для определения, какие строки после GROUP BY должны быть выбраны.

· ORDER BY — используется для определения, какие столбцы используются для сортировки результирующего набора данных.

Ограничение возвращаемых строк

Согласно ISO SQL:2003 возвращаемый набор данных может быть ограничен с помощью:

· курсоров, или

· введением оконных функций в оператор SELECT

34,35 Подзапросы.?

Вложенный подзапрос - это подзапрос, заключенный в круглые скобки и вложенный в WHERE (HAVING) фразу предложения SELECT или других предложений, использующих WHERE фразу. Вложенный подзапрос может содержать в своей WHERE (HAVING) фразе другой вложенный подзапрос и т.д. Нетрудно догадаться, что вложенный подзапрос создан для того, чтобы при отборе строк таблицы, сформированной основным запросом, можно было использовать данные из других таблиц (например, при отборе блюд для меню использовать данные о наличии продуктов в кладовой пансионата).

Коррелирующие подзапросы позволяют иногда очень кратко написать запросы, которые могут выглядеть весьма громоздко при использовании других средств. Напомним, что коррелирующий подзапрос содержит ссылку на содержащий его запрос (назовем его основным), в результате чего подзапрос выполняется для каждой строки основного запроса.

36. Язык PL/sql .основные понятия?

Язык PL/SQL (Procedural Language / Structured Query Language) - это процедурный язык представляющий собой расширение стандарта ANSI языка SQL, разработанного фирмой Oracle.

PL/SQL - это процедурный язык пошагового программирования, инкапсулирующий язык SQL. В результате получается хорошо развитый язык программирования третьего поколения (3GL), подобный языку C++, Pascal и т. д. В своей сути PL/SQL блочно ориентирован.

PL/SQL имеет строгие правила области видимости переменных, поддерживает параметризованные вызовы процедур и функций и так же унаследовал от языка ADA такое средство, как пакеты (package).

PL/SQL предусматривает строгий контроль типов, все ошибки несовместимости типов выявляются на этапе компиляции и выполнения. Так же поддерживается явное и неявное преобразование типов.

PL/SQL - поддерживает сложные структуры данных, так же предусмотрена перегрузка подпрограмм, для создания гибкой среды прикладного программирования.

Функциональность

PL/SQL даёт возможность использовать переменные, операторы, массивы, курсоры и исключения.

Стандартный SQL является специализированным декларативным языком программирования. На язык наложены определённые ограничения, такие как, например, отсутствие прямой поддержки циклов. PL/SQL же, как полный по Тьюрингу язык, позволяет разработчикам обрабатывать реляционную базу данных Oracle, используя (более привычный) императивный стиль программирования. Операторы SQL могут быть легко вызваны непосредственно из PL/SQL-процедуры, функции или из триггера (иногда с некоторыми ограничениями).

Типы данных

Язык PL/SQL поддерживает следующие категории типов:

-встроенные типы данных, включая коллекции и записи;

--скалярные;

--составные;

--ссылочные;

36,37. операторы выбора:

1. IF - THEN - END IF;

2. IF - THEN - ELSE - END IF;

3. IF - THEN - ELSIF - END IF;

4. CASE - WHEN - THEN - END CASE;

Общий синтаксис конструкции IF…THEN таков:

IF условие THEN

... последовательность исполняемых операторов ...

END IF;

Здесь условие — это логическая переменная, константа или логическое выражение, результатом проверки которого является возвращаемое значение TRUE, FALSE или NULL. Исполняемые операторы, расположенные между ключевыми словами THEN и END IF, выполняются, если результат проверки условия равен TRUE, и не выполняются – если он равен FALSE или NULL.

Конструкция IF…THEN…ELSE применяется в случаях, когда нужно выбрать одно из двух взаимоисключающих действий.Формат этой версии оператора IF таков:

IF условие THEN

... последовательность операторов, выполняемых в случае,

когда результат проверки условия равен TRUE . . .

ELSE

... последовательность операторов, выполняемых в случае,

когда результат проверни условия равен FALSE или NULL ...

END IF;

Здесь условие – это логическая переменная, константа или логическое выражение. Если его значением является TRUE, выполняются операторы, расположенные между ключевыми словами THEN и ELSE, а если таковым служит FALSE или

Конструкция IF…THEN…ELSIF

Конструкция IF…THEN…ELSIF представляет собой один иэ способов реализации функций оператора CASE.

В каждом предложении ELSIF за условием должно следовать ключевое слово THEN, а наличие ELSE не является обязательным. Последнее ключевое слово, если оно вообще используется, ставится в конце конструкции IF…THEN…ELSIF и означает «если неверно все вышеперечисленное». То есть когда ни одно из условий не равно TRUE, выполняются операторы, следующие за ELSE. Если же ключевое слово ELSE отсутствует, все исполняемые блоки конструкции IF…THEN…ELSIF игнорируются.

CASE - WHEN - THEN - END CASE;

Простой оператор CASE позволяет выбрать для выполнения одну из нескольких последовательностей операторов PL/SQL в зависимости от результата вычисления одного выражения. Он имеет следующую форму записи:

 

 

38,36 операторы цикла:

1. LOOP - END LOOP;

2. WHILE - LOOP - END LOOP;

3. FOR - LOOP - END LOOP;

4. EXIT;

5. EXIT WHEN;

В PL/SQL существует два вида цикла FOR: с числовым счетчиком и с курсором. Цикл с числовым счетчиком — это традиционный и хорошо знакомый всем программистам цикл FOR, имеющийся в большинстве языков программирования. Количество итераций данного цикла известно еще до его начала — это диапазон, задаваемый между ключевыми словами FOR и LOOP. При установке диапазона значений счетчика цикла неявно объявляется сам счетчик (если он не был объявлен ранее), определяются начальное и конечное значения диапазона, а также задается направление изменена значений счетчика (от наименьшего к наибольшему или наоборот).

1)Структура простого цикла лежит в основе всех остальных циклических конструкций. Такой цикл состоит из ключевого слова loop, исполняемого кода (тела цикла) н ключевых слов end loop:

LOOP

исполняемые_операторы

END LOOP;

2)Цикл WHILE относится к числу условных. Его выполнение продолжается до тех пор, пока результатом проверки определенного в цикле условия является значе TRUE. А поскольку возможность выполнения этого цикла зависит от условия и не ограничено определенным количеством повторений, он используется имен в тех случаях, когда количество повторений цикла заранее не известно. Приведем общий синтаксис цикла WHILE:

WHILE условие

испалнявные_операторы

END LOOP;

Здесь условие – это логическая переменная или выражение, результатом проверки которого является логическое значение Условие завершения цикла:

Если значением логического выражения цикла является FALSE или NULL

В каких случаях используется данный цикл:

Во-первых, если не известно, сколько раз будет выполняться тело цикла; во-вторых, когда необходимо, чтобы возможность выполнения цикла определялась условием; в-третьих, когда необязательно, чтобы тело цикла было выполнено хотя бы один раз

3)Приведем общий синтаксис цикла FOR:

FOR индекс_цикла IN [REVERSE]

начальное_значение .. конечное_значение LOOP

исполняемые_операторы END LOOP;

Между ключевыми словами LOOP и END LOOP должен стоять хотя бы один исполняемый оператор. Свойства цикла FOR с числовым счетчиком приведены в следующей таблице.

Условие завершения:

Если выполнено то количество итераций, которое определено диапазоном значений счетчика. (Можно завершить цикл и оператором EXIT, но это делать не рекомендуется)

39. именованный блок или ПРОЦЕДУРА.

Синтаксис его объявления таков:

-------------- CREATE [OR REPLACE] PROCEDURE - имя_процедуры ----------------------------------

-------------- (аргумент [IN] [OUT] [IN OUT] тип, ..... ) AS [IS] -----------------------------

-------------- тело процедуры -----------------------------------------------------------------

где:

(имя_процедуры) - имя создаваемой процедуры,

(аргумент) - имя параметра процедуры,

(тип) - это тип соответствующего параметра,

(тело процедуры) - это блок PL/SQL в котором содержится текст процедуры.

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

Процедура создана.

функция, принимает параметры и возвращает одно, значение.

Определение функции таково:

-------------- CREATE [OR REPLACE] FUNCTION - имя_функции -------------------------------------

-------------- (аргумент [IN] [OUT] [IN OUT] тип, ..... ) AS [IS] -----------------------------

-------------- тело процедуры -----------------------------------------------------------------

-------------- RETURN (возвращаемое_значение) -------------------------------------------------

 

Кое-что вам уже знакомо, за исключением того, что присутствует оператор RETURN. Посредством оператора RETURN функция возвращает значение. Функция, как правило, вызывается внутри какого-либо определения, т.к. вызывать функцию как оператор нет смысла.

функция преобразования BOOLEAN типа в тип VARCHAR2:

пакеты (package). Еще их называют модулями. Сама концепция пакета в PL/SQL пришла все из языка программирования Ada. Пакет позволяет в точном определении хранить связанные объекты в одном месте.

Пример пакета:

По своей сути модуль представляет собой именованный раздел объявлений. В него могут входить, различные объявления, как то:

· процедуры

· функции

· типы

· курсоры

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

40, 36 Курсоры?

Курсор — ссылка на контекстную область памяти. В некоторых реализациях языка программирования SQL (Oracle, Microsoft SQL Server) — получаемый при выполнении запроса результирующий набор и связанный с ним указатель текущей записи.

Курсор в PL/SQL

В PL/SQL поддерживаются два типа курсоров: явные и неявные. Явный курсор объявляется разработчиком, а неявный курсор не требует объявления.

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

Курсор может быть объявлен в секциях объявлений любого блока PL/SQL, подпрограммы или пакета.

Операторы управления явным курсором

· Оператор CURSOR выполняет объявление явного курсора.

· Оператор OPEN открывает курсор, создавая новый результирующий набор на базе указанного запроса.

· Оператор FETCH выполняет последовательное извлечение строк из результирующего набора от начала до конца.

· Оператор CLOSE закрывает курсор и освобождает занимаемые им ресурсы

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

· %ISOPEN — возвращает значение TRUE, если курсор открыт.

· %FOUND — определяет, найдена ли строка, удовлетворяющая условию.

· %NOTFOUND — возвращает TRUE, если строка не найдена.

· %ROWCOUNT — возвращает номер текущей строки.

41,36 Динамические SQL-предложения ?Основным положением в понимании использования динамических SQL-предложений является то, что если некоторое SQL-предложение является динамически формируемым, то программа должна построить правильное SQL-предложение, выполняя последовательность определенных шагов, формирующих это предложение; выполнить его, а в случае, если это SQL-предложение представляет собой запрос к базе данных [запросное и незапросные предложения - см. таблицу 1. Прим. переводчика], а также определить его колонки и выборку строк возвращаемого набора. Тип выборки и число шагов, требуемое для выполнения динамических SQL-предложений, изменяется в зависимости от типа SQL-предложения, что и вынуждает программу определенным образом определять и выполнять эти предложения. Различные возможности выделили четыре формальных метода формирования динамических SQL-предложений. Таблица 1 кратко излагает некоторые особенности каждого метода. В последней колонке таблицы 1 приводятся последовательности списков вызовов подпрограмм пакета DBMS_SQL, которые программа на PL/SQL должна выполнить, чтобы реализовать динамически формируемые SQL-предложения каждого типа. Если Вы еще не очень свободно владеете механизмом формирования динамических SQL-предложений и хотели бы получить больше информации, рекомендую обратиться к главе о динамических SQL-предложениях в Руководстве "Programmer`s Guide to the Oracle Precompilers" (Руководство программиста по прекомпиляторам Oracle). Не дублируя сведений, которые можно получить из документации, эта статья фокусирует внимание читателей на использовании пакета DBMS_SQL, чтобы показать возможность применения динамически формируемых SQL-предложений в программах на PL/SQL.

42, 36 Обработка исключительных ситуаций?

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

CASE:EXCEPTION

WHEN имя исилючения_1 THEN

исполняемые операторы_1

WHEN имя_искилючения_N THEN

исполняемые операторы_n

WHEN OTHERS THEN

исполняемые_операторы others

END;

Если имя генерируемой ошибки соответствует исключению имя_исключения_1, выполняются исполняеные_операторы_1; если оно соответствует исключению имя_искилючения_N, выполняются исполняемые_операторы_N и т. д, Предложение WHEN OTHERS служит для обработки исключений, не обработанных операторами предшествующих предложений WHEN (подобно ключевому слову ELSE оператора IF).

43,36 Тригеры!

Сам по себе триггер БД, является именованным блоком PL/SQL и после компиляции хранится, в соответствующих словарях данных БД. Но он имеет ряд особенностей. Процедуры или функции, могут вызывать или быть вызваны другими процедурами, при этом им могут быть переданы параметры. Триггер - не может быть вызван из другой процедуры БД и не принимает никаких параметров при вызове. Само название говорит о том, что этот блок PL/SQL - срабатывает при определенном событии, а именно при запуске операций DML - INSERT, UPDATE, DELETE. Существуют так же так называемые системные триггеры, которые срабатывают на события самой БД.

В основном триггеры используются для:

1. Реализации сложных ограничений целостности данных, которые невозможно осуществить через описательные ограничения, устанавливаемые при создании таблиц.

2. Организации всевозможных видов аудита. Например, слежения за изменениями в какой-либо важной таблице БД.

3. Автоматического оповещения других модулей о том, что делать в случае изменения информации содержащейся в таблице БД.

4. Для реализации так называемых "бизнес правил".

5. Для организации каскадных воздействий на таблицы БД.

Синтаксис команды для создания триггера, следующий:

--- CREATE [OR REPLACE] TRIGGER имя_триггера ---------------------

--- BEFORE | AFTER активизирующее_событие ON ссылка_на_таблицу ---

--- FOR EACH ROW [WHEN условие_срабатывания] ---------------------

--- тело_триггера ------------------------------------------------

Где:

имя_триггера - собственно имя вашего триггера.

активизирующее_событие - указывает момент активации триггера BEFORE до срабатывания оператора DML, AFTER после срабатывания оператора DML.

ссылка_на_таблицу - собственно таблица, для которой создан триггер.

FOR EACH ROW - если указано активируется от воздействия на строку если нет, то после любого оператора DML.

условие_срабатывания - если TRUE триггер срабатывает, если FALSE нет.

тело_триггера - собственно тело триггера.

44 КАК РАБОТАЕТ ТРАНЗАКЦИЯ ?

транзакция – это одна или более SQL-команд, завершенных фиксацией или откатом. Под фиксацией (commiting) понимается принятие и сохранение всех изменений. Откат (rollbacking) – это процедура отмены последних изменений, т.е. возврат к предыдущему состоянию БД.

транзакция выполняется следующим образом:

Приложение обрабатывает пользовательский ввод и создает соединение с сервером посредством SQL*Net.

Сервер принимает запрос на соединение и создает серверный процесс.

Пользователь выполняет SQL-команду (или совокупность команд). В нашем примере будем считать, что пользователь изменяет данные в строке таблицы.

Серверный процесс просматривает разделяемый пул – есть ли там SQL-область с идентичными SQL-командами. Если он находит аналогичную разделяемую SQL-область, то серверный процесс проверяет права пользователя на доступ к данным. Предположим, что права есть, тогда серверный процесс выполняет команды, используя разделяемую SQL-область. Однако, если разделяемая SQL-область не найдена, то выделяется память под новую, а затем происходит разбор и выполнение SQL-команд.

Серверный процесс ищет данные в SGA (если они там есть) или считывает их из файла данных в SGA.

Серверный процесс изменяет данные в SGA. Запомните, что серверный процесс может только читать данные из файла данных. Позже процесс DBWR запишет измененные блоки данных в постоянное хранилище (жесткий диск, магнитная лента …).

Пользователь выполняет команду COMMIT (фиксация) или ROLLBACK (откат). COMMIT завершает транзакцию, а ROLLBACK отменяет изменения. Если транзакция зафиксирована, то процесс LGWR немедленно записывает ее в файл журнала изменений.

Если транзакция успешно завершена, то клиентскому процессу передается код завершения. Если произошел какой-либо сбой, то возвращается сообщение об ошибке.

ЗАМЕЧАНИЕ: Транзакция не считается зафиксированной до тех пор, пока не завершена запись в файл журнала изменений (redo log file). Этот механизм способствует тому, что в случае сбоя зафиксированная транзакция может быть восстановлена.

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

-COMMIT. Оператор COMMIT завершает транзакцию и делает любые выполненные в ней изменения постоянными. Освобождаются блокировки.

-ROLLBACK. Оператор отката завершает транзакцию и отменяет все выполненные в ней и незафиксированные изменения. Для этого он читает информацию из сегментов отката и восстанавливает блоки данных в состояние, в котором они находились до начала транзакции. Освобождаются блокировки.

45. Словарь данных СУБД?

документ, описывающий базу данных или комплект баз данных

целый компонент СУБД, необходимый для определения ее структуры

часть подпрограммного ПО, расширяющее или подменяющее встроенные словари данных СУБД

Область SYSTEM: табличная область для всех таблиц

Каждая база данных ORACLE7 имеет по крайней мере одну табличную область - область SYSTEM. ORACLE7 использует табличную область SYSTEM для хранения словаря данных. Словарь данных - набор внутренних системных таблиц, содержащих все виды информации о базе данных. Например: имеются таблицы словаря данных с информацией о таблицах табличных областях и файлах данных СУБД.