Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР методичка прог в КС / метод_лаб_программирование_КС_071900_2010.doc
Скачиваний:
46
Добавлен:
10.06.2015
Размер:
337.41 Кб
Скачать

Контрольные вопросы

1. Внешний ключ. Определение.

2. Сформулируйте определение первичного ключа.

3. Последовательность действий при создании внешнего ключа.

4. Алгоритм создания первичного ключа.

5. Каким образом можно произвести удаление ключа в SQL Server.

Лабораторная работа № 7 Использование ограничений в sql – совместимых базах данных

Цель и содержание: изучить методы контроля за целостностью данных в SQL – совместимых базах данных; изучить возможности применения ограничений пользователя в SQL – совместимых базах данных.

Теоретическое обоснование

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

В таблице PREDMET базы данных EDUCATION имеется поле COURS, содержащее в себе порядковый номер курса, на котором проводятся занятия по данному предмету. Установим ограничение на ввод значений в это поле в диапазоне от 1 до 5.

Рассмотрим процесс создания ограничений для таблицы с помощью утилиты Enterprise Manager, для чего приведем порядок действии, необходимый для решения поставленной задачи:

  • выберите необходимую таблицу в списке объектов базы Данных, в нашем случае PREDMET;

  • выполните команду Design Table меню Action, посте чего та экране отобразится диалоговое окно дизайнера таблиц;

  • в дизайнере таблиц выберите кнопку Table and Index Priperties, с помощью которой отобразится диалоговое окно свойств данной таблицы;

  • нажатие кнопки New приведет к созданию нового ограничения с именем CK_PREDMET, после чего в поле Соnstraint expression необходимо будет ввести SQL-комавду проверки вводимых значений;

  • для проверки корректности ввода значений воспользуемся следующим SQL-кодом: cours between 1 and 5

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

Задание. Для разработанной в задании 1 лабораторной работы № 1 структуры данных, установите ограничения на ввод данных пользователя.

Контрольные вопросы

1. Для чего используются методы контроля данных в SQL – совместимых базах данных?

2. Порядок действий при установке ограничений на значения полей.

Лабораторная работа № 8 Хранимые процедуры в sql Server

Цель работы: познакомить студентов с понятием хранимая процедура, рассмотреть основные методы их создания.

Теоретическое обоснование

Хранимые процедуры - представляют собой процессы, выполняемые непосредственно на сервере баз данных. Для этого используется утилита SQL Server Enterprise Manager.

Все хранимые процедуры в базе данных находятся в специально отведенном списке Stored Procedures. Следует обратить внимание на перечень системных процедур, используемых при работе SQL-сервера, список которых также находится в этой группе.

При этом в колонке Type возле имени процедур находится ключевое слово System, которое показывает принадлежность данной процедуры к группе системных процедур. С другой стороны, все процедуры, создаваемые пользователем, помечаются ключевым словом User в колонке Type.

Для создания новой процедуры выберите команду New Stored Procedures меню Action, после чего на экране отобразится диалоговое окно, в котором будет расположена область для ввода текста процедуры.

Рассмотрим использование хранимых процедур на примерах. В начале создадим простую процедуру, позволяющую увеличить на единицу значение поля COURS таблицы PREDMET базы данных EDUCATION.

Данное действие может быть полезно, например, при переводе всех студентов на следующий курс обучения. В базе данных EDUCATION соответствующее поле отсутствует, поэтому отработаем этот механизм на примере поля COURS таблицы PREDMET.

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

CREATE PROCEDURE [PROCEDURE NAME] AS

Здесь вместо текста [PROCEDURE NAME] необходимо ввести имя создаваемой процедуры, после чего набрать текст ее команд. В нашем примере будет использоваться SQL-команда UPDATE. позволяющая изменять данные в таблицах. Текст процедуры NEW_COURS, реализующий описанное действие будет иметь следующий вид:

CREATE PROCEDURE NEW_COURS AS

UPDATE PREDMET

SET COURS = COURS + 1

Следующим этапом будет проверка работоспособности созданной процедуры. Для этого запустите утилиту SQL Server Query Analyzer, после чего осуществите подключение к требуемому серверу баз данных. Выберите базу данных EDUCATION в выпадающем списке DB. после чего введите следующие SQL-команды:

ЕХЕС NEW_COURS

SELECT * FROM PREDMET

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

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

PNUM

PNAME

TNUM

HOURS

COURS

2001

Физика

4001

34

2

2002

Химия

4002

68

2

2003

Математика

4003

68

2

2004

Философия

4005

17

3

2005

Экономика

4004

17

4

(5 row(s) affected)

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

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

Для решения данной задачи создадим новую хранимую процедуру IND_STIP_KF со следующим SQL-кодом:

CREATE PROCEDURE IND_STIP_КF

(@KF_INDEX REAL, @FOR_SUM SMALLMONEY )

AS

UPDATE STUDENTS

SET STIP = STIP * @KF_INDEX

WHERE STIP = @FOR_SUM

Здесь следует обратить внимание на использование переменных-параметров, принимаемых процедурой. Так, каждая переменная внутри хранимой процедуры описывается следующим образом: @ имя_переменной тип_ данных. Если в процедуру передается несколько параметров, то они указываются через запятую в скобках после ее имени. В нашем случае в процедуру передаются переменные @KF_INDEX (коэффициент, на который будет увеличиваться сумма стипендии) и @FOR_SUM (сумма стипендии, для которой будет произведено изменение).

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

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

ЕХЕС IND_STIP_KF @KF_INDEX=1.2, @FOR_SUM==25.5

SELECT * FROM STUDENTS

При этом в окне утилиты SQL Server Query Analyzer отобразится следующая информация:

(2 row(s) affected)

SNUM

SFAM

SIMA

SOTCH

STIP

3412

Поляков

Анатолий

Алексеевич

30.6000

3413

Старова

Любовь

Михайловна

17.0000

3414

Гриценко

Владимир

Николаевич

. 0000

3415

Котенко

Анатолий

Николаевич

.0000

3416

Нагорный

Евгений

Васильевич

30.6000

(5 row(s) affected)

Использование команды SELECT при запуске не является обязательным. В нашем случае она употребляется для проверки произведенных операций.

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

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

IF выражение

операторы

[ELSE]

[IF выражение] операторы

Например, необходимо выполнить операцию индексирования стипендии студента только в том случае, если им посещались занятия по определенному предмету. Для этого в хранимую процедуру будут передаваться три параметра: @SNUM_PM - номер студенческого билет, @PNUM_PM - код предмета и @IND_KF -процент индексации стипендии. SQL-код создания данной процедуры IND_STIP_PREDMET будет иметь следующий вид:

CREATE PROCEDURE IND_STIP_PREDMET

(@S3STUM_PM INT,

@PNUM_PM SMALLINT,

@IND_KF REAL)

AS

IF EXISTS (SELECT SNUM, PNUM FROM USP

WHERE SNUM = @SNUM_PM

AND PNUM = @PNUM_PM)

UPDATE STUDENTS

SET STIP = STIP * @IND_KF

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

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

ЕХЕС IND_STIP_PREDMET @SNUM_PM = 3412,

@PNUM_PM = 2001, @IND_KF = 2

и

ЕХЕС IND_STIP_PREDMET @SNUM_PM = 3414,

@PNUM_PM = 2003, @ IND_KF = 2

В результате первого запуска увеличится стипендия студента Полякова Анатолия Алексеевич в два раза. Второй запуск процедуры не приведет к каким-либо изменениям из-за отсутствия оценки по математике у студента Гриценко Владимира Николаевича.

Если имеется необходимость в использовании нескольких подряд идущих операторов, то в этом случае необходимо воспользоваться следующей конструкцией:

BEGIN

операторы

END

Например, если в приведенной процедуре IND_STIP_PREDMET потребуется добавить операцию удаления информации об оценке студента, удовлетворяющей представленному условию, то текст этой процедуры будет иметь следующий вид:

CREATE PROCEDURE IND_STIP_PREDMET

(@SNUM__PM INT,

@PNUM_PM SMALLINT,

@IND_KF REAL)

AS

IF EXISTS (SELECT SNUM, PNUM FROM USP

WHERE SNUM = @SNUM_PM

AND PNUM = @PNUM_PM)

BEGIN

UPDATE STUDENTS

SET STIP = STIP * @IND_KF

DELETE FROM USP

WHERE PNUM = @PNUM_PM

AND SNUM = @SNUMJPM

END

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

Циклическое выполнение операций в хранимых процедурах удобно организовывать с помощью следующей структуры:

WHILE

логическое выражение

операторы

Для изучения возможностей данной конструкции, рассмотрим простой пример нахождения значения факториала числа:

CREATE PROCEDURE FACTORIAL @N INT

AS

DECLARE @X INT

DECLARE @I INT

SELECT @I = 2

SELECT @X = 1

WHILE @I <= @N

BEGIN

SELECT @X = @X * @I

SELECT @I = @I + 1

END

PRINT ‘Получен факториал:’

PRINT @X

В данном случае нам потребовались две дополнительные переменные, для использования которых используется директива DECLARE. При этом, если необходимо присвоить какое-либо значение данным переменных, используется ключевое слово SELECT. Оператор PRINT позволяет выдать текстовое сообщение на устройство вывода, в нашем случае на экран.

В операторе WHILE можно также использовать ключевое слово BREAK, которое позволяет прервать выполнение этого цикла. Его обычно используют при определении условия. Например, в нашем случае можно внутри цикла контролировать превышение допустимого значения переменной используемого типа, в результате чего система выведет курсор выполнения процедуры за пределы цикла. Здесь также может использоваться ключевое слово CONTINUE, что позволяет продолжить выполнение операторов, содержащихся внутри конструкции WHILE.

В хранимых процедурах также можно использовать метки и оператор перехода между ними GOTO. Рассмотренный выше пример с использованием данной возможности будет иметь следующий вид:

CREATE PROCEDURE GOTOFACTORIAL @N INT

AS

DECLARE @X INT

DECLARE @I INT

SELECT @I = 1

SELECT @X = 1

МЕТКА:

SELECT @X = @X * @I

SELECT @I = @I + 1

IF @I <= @N GOTO МЕТКА

PRINT ’Получен факториал:’

PRINT @X

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

CREATE PROCEDURE PROVERKA @N TINYINT

AS

BEGIN

DECLARE @X REAL

SELECT @X =

CASE @N

WHEN 1 THEN 17

WHEN 2 THEN 25.50

WHEN 3 THEN 34

ELSE 0

END

PRINT 'Установлена стипендия:'

PRINT @X

END

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

В хранимых процедурах часто используются так называемые системные переменные, которые представляют пользователю определенную информацию о системе SQL-сервер.