Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методическое пособие по выполнению лабораторных работ по SQL.doc
Скачиваний:
167
Добавлен:
01.05.2014
Размер:
1.22 Mб
Скачать

Вопросы для самоконтроля к лабораторной работе № 6

  1. Что такое представление?

  2. С какой целью создаются представления?

  3. В чем отличие простых и сложных представлений?

  4. Какое предложение, включенное в команду Create View, позволяет создавать представление в отсутствии базовых таблиц?

  5. Какие предложения не может содержать запрос, определяющий представления?

  6. Какие представления позволяют выполнять все без исключения операции DML?

  7. Когда через представления нельзя выполнить операции удаления?

  8. Как реализуется запрос на выполнение операции DML при создании представления?

  9. Когда в представлении нельзя выполнить операцию добавления, но можно выполнить операцию удаления?

  10. Допускается ли изменение представления?

  11. В каких случаях нельзя изменить данные в представлении?

  12. Представление содержит групповые функции, условия соединения, вычисляемые значения, какие операции над данными не будут выполняться в этом представлении?

Лабораторная работа №7

Цель занятия:Знакомство с объектами СХЕМЫ БАЗЫ ДАННЫХ. Создание и использование хранимых процедур.

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

Хранимая процедура ещё один объект базы данных, которая представляет собой набор откомпилированных операторов SQL. Хранимая процедура не содержит информации из базы данных, но содержит ссылки на базовые таблицы, где хранятся нужные данные. Хранимые процедуры позволяют выделять какие-либо правила в отдельную структуру, которые затем могут использоваться многими приложениями.

В хранимые процедуры вводятся аргументы, возвращаются результирующие наборы данных. Если хранимая процедура не является триггером, то она вызывается приложением явно.

При создании процедур необходимо придерживаться следующих правил: во время выполнения хранимой процедуры все объекты, на которые она ссылается, должны присутствовать в базе данных. В хранимых процедурах нельзя применять операторы создания объектов: CREATE PROCEDURE, CREATE TRIGGER, CREATEVIEW.

Прежде, чем выполнить хранимую процедуру SQLServer2000 генерирует для нее план исполнения, выполняет оптимизацию хранимой процедуры и компилирует ее. В дальнейшем этот план и откомпилированный код кэшируются. При повторном вызове процедуры, сервер уже использует готовый план и откомпилированный код процедуры, экономя за счет этого ресурсы (см. Рисунок 3). Недостатком данного метода является то, что процедура может быть оптимизирована «не на тех данных», и план запуска оптимальный на начальном наборе данных, может быть не оптимален на всех последующих. В этих случаях используется принудительная перекомпиляция при каждом запуске процедуры.

Существует несколько типов хранимых процедур, реализуемых на SQLServer2000

      1. Системные хранимые процедуры

      2. Пользовательские хранимые процедуры

      3. Локальные временные хранимые процедуры

      4. Глобальные временные хранимые процедуры.

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

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

Локальные и глобальные временные хранимые процедуры хранятся в базе данных tempdb. Имя локальных процедур начинается с #, имя глобальных процедур - ##. Локальные временные хранимые процедуры могут быть вызваны только из того соединения, в котором они созданы, глобальные – из любого соединения сервера, на котором была создана эта процедура. Так как эти процедуры временные, то они удаляются при перезапуске или остановке сервера, при закрытии соединения, в контексте которого они были созданы.

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

Добавляется к

sysobjects

sysdepends

syscomments

Разработка

Рисунок 3

Синтаксис команды:

CREATE PROC[EDURE ] имя_процедуры [ ; число ]

[ { @параметр тип_данных }

[ VARYING ] [ = значение_по_умолчанию ] [ OUTPUT ] ] [ ,...n ]

[ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

ASоператор_SQL[ ...n]

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

VARYING– определяет, что выходным параметром будет результирующее множество (используется совместно с параметромOUTPUT).

RECOMPILE– предписывает выполнять перекомпиляцию кода процедуры при ее запуске.

ENCRUPTION– предписывает серверу выполнить кодирование процедуры, сделав ее содержимое недоступным для пользователя. Автору процедуры при этом надо позаботиться о наличии у него исходного текста процедуры.

AS– индикатор начала собственно кода процедуры.

Вызов процедуры (исключение составляют триггеры) осуществляется по команде EXEC.

Синтаксис команды EXEC

EXEC <Имя процедуры> [<список параметров>]

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

Во-первых, познакомимся с понятием сценарий (SCRIPT), представляющим собой последовательность действий, выполняемых целиком и сохраненных в файле. Примером сценария может быть любая команда языка DDL или DML

Во-вторых – с понятием пакет (BATH), который есть совокупность процедур, функций, переменных и операторов языка SQL, которые сгруппированы вместе и хранятся в виде единого программного блока. Все операторы внутри пакета комбинируются в единый план исполнения (execution plane) и пока все операторы не будут успешно проанализированы синтаксическим анализатором, ни один из операторов пакета не будет выполнен. Если некоторый оператор в пакете вызвал ошибку на этапе выполнения программы, то выполняются все операторы до ошибочного. Пакеты отделяются друг от друга с помощью оператора GO, который не является командой T-SQL, это директива и на сервер не пересылается. Оператор GO должен писаться в отдельной строке и ничего кроме комментариев не должно следовать за ним. Все операторы от начала сценария до GO компилируются в один пакет и пересылаются на сервер отдельно от других пакетов.