Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции по серверам.doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
749 Кб
Скачать
☆
    1. Выполнение хранимой процедуры.

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

EXEC[UTE] имя процедуры [@параметр = значение]

Значение параметра задается путем передачи значения или ссылки на позицию.

Передача параметра со ссылками на имена осуществляется следующим образом: @параметр = значение. При этом значения параметров можно указывать в любом порядке, а параметры, имеющие значение по умолчанию, опускать.

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

Возврат значений при помощи параметров вывода.

Для использования параметра вывода ключевое слово OUTPUT должно указываться как в операторе CREATE PROC, так и в операторе EXEC. Вызывающий оператор должен указать для параметра вывода имя переменной.

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

USE <имя БД>

GO

CREATE PROCEDURE SUMMA

@A smallint,

@B smallint,

@S smallint OUTPUT

AS

SET @S= @A+@B

Вызов:

DECLARE @result smallint

EXEC SUMMA 5,7,@result OUTPUT

SELECT ‘результат=’, @result

После выполнения оператора EXEC переменная @result будет хранить значение параметра вывода. Вывод значения осуществляется оператором SELECT.

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

Примеры:

1.Создадим процедуру NEW_COURSE для увеличения значения атрибута COURSE при переводе студентов на следующий курс.

CREATE PROCEDURE NEW_COURSE

AS UPDATE STUDENT

SET COURS=COURSE + 1

Вызов процедуры:

EXEC NEW_COURSE

2. Создадим процедуру для начисления стипендии студентам в зависимости от полученного среднего балла. В процедуру передается значение среднего балла, в зависимости от которого система устанавливает ставку стипендии.

CREATE PROCEDURE STIP

@N TINYINT --средний балл

AS

BEGIN

DECLARE @X REAL

SELECT @X=

CASE @N

WHEN 3 THEN 20

WHEN 4 THEN 30

WHEN 5 THEN 40

ELSE 0

END

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

PRINT @X

END

Вызов:

EXEC STIP 3

3.Функция, реализующая эту же задачу:

CREATE PROCEDURE STIP

@N TINYINT

AS

BEGIN

DECLARE @X REAL

SELECT @X=

CASE @N

WHEN 3 THEN 20

WHEN 4 THEN 30

WHEN 5 THEN 40

ELSE 0

END

RETURN @X

END

DECLARE @ST REAL

EXEC @St=Stip 3

SELECT "стипендия =", @ST

3. Процедура для повышения стипендии студентам, прослушавшим спецкурс по заданному предмету.

В процедуру будут передаваться следующие параметры: @NOM_ZACH – номер зачетки, @PKOD – код предмета и @IND – процент индексации стипендии.

CREATE PROC IND_STIP

(@NOM_ZACH int,

@PKOD smallint,

@IND real)

AS

IF EXISTS (SELECT PKOD, NOM_ZACH

FROM USP

WHERE NOM_ZACH = @ NOM_ZACH

AND PKOD= @PKOD)

UPDATE STUDENTS SET STIP=STIP*@IND

Для запуска процедуры:

EXEC IND_STIP @NOM_ZACH = 1298, @PKOD =1212, @IND=1.2