Программирование на стороне сервера с использованием языка Transact SQL: Лабораторная работа № 9 по курсу «Информационные технологии в менеджменте», страница 2

(@id int)                     //@id – параметр

as

begin

select name from piple where id=@id

end

go

Сценарий вызова

declare @s char(15)

declare @id int

set @id=3

exec proc3 @id

Рекомендация. При отладке хранимой процедуры в SQL Server Mendgement Studio 2005 приходиться вносить в нее изменения. Поэтому выполните ее создание в простом варианте, а затем отлаживайте через команду Alter, внося изменения,  и не забывайте выполнять refresh БД. 

Задание 6. Использование в хранимых процедурах входных и выходных параметров.

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

Пример создания

alter procedure proc4(@id int,@s char(10) output,@sr real output)

as

begin

SELECT  @sr=avg(oc)

FROM  piple INNER JOIN

Advencement ON piple.id = Advencement.idP

where id=@id

SELECT  @s=name

FROM  piple

where id=@id

end

Сценарий вызова

use uchenic

go

declare @s char(10)

declare @sr real

declare @id int

exec proc4 2,@s output, @sr output       //2-id ученика

print @s+str(@sr)                        //print - отображение результатов

Задание 7. Вставка данных в главную и подчиненные таблицы. Использование системной переменной @@Identity.

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

Создание процедуры

Alter procedure proc5

(@name char(20),@sex char, @Klass int, @date datetime,

@name1 char(20),@idstatus1 int, @placeWork1 char(50), @sex1 char,

@name2 char(20),@idstatus2 int, @placeWork2 char(50), @sex2 char,@id int output)

as

begin

insert into piple

(name ,sex , Klass , data )

values

(lower(@name) ,lower(@sex) , @Klass , @date )

declare @idparents int

select @idparents=@@IDENTITY

set @id=@idparents

insert into parents

values

(@idparents ,lower(@name1) ,@idstatus1 , lower(@placeWork1) , lower(@sex1 ))

insert into parents

values

(@idparents ,lower(@name2) ,@idstatus2 , lower(@placeWork2) , lower(@sex2 ))

end

Сценарий вызова

declare @id int

exec proc5

'Майский И.','ì', 10, '02.02.1992',

'Майский A.',1, 'OOO', 'мì',

'Майская О.,2, 'MMM', 'ж',@id output

print @id

Результат успешного вызова

(1 row(s) affected)

(1 row(s) affected)

(1 row(s) affected)

10

6.  Использование операторов управления ходом вычислительного процесса

IF, goto, while, waitfor, tray/catch.

Задание 8. Использование оператора IF.

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

dateDIFF(datepart,datestart,enddate) – разница между двумя датами datestart,enddate, а datepart определяет тип результата, например dd – означает, что результат в днях.

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

Alter procedure proc5

(@name char(20),@sex char, @Klass int, @date datetime,

@name1 char(20),@idstatus1 int, @placeWork1 char(50), @sex1 char,

@name2 char(20),@idstatus2 int, @placeWork2 char(50), @sex2 char,@id int output)

as

begin

declare @InsDate smalldatetime

if dateDIFF(dd,@date,getdate())>0

/*обнуление переданных для вставки дат */

select @date=Null;

else/*отсечение параметров времени из значения даты*/

select @InsDate=convert(datetime,(convert(varchar,@date,112)));

insert into piple

(name ,sex , Klass , data )

values

(lower(@name) ,lower(@sex) , @Klass , @date )

declare @idparents int

select @idparents=@@IDENTITY

set @id=@idparents

insert into parents

values

(@idparents ,lower(@name1) ,@idstatus1 , lower(@placeWork1) , lower(@sex1 ))

insert into parents

values

(@idparents ,lower(@name2) ,@idstatus2 , lower(@placeWork2) , lower(@sex2 ))

end

Сценарий вызова

Может быть тот же.

Задание 9. Использование оператора case

Создайте запрос, который формирует список девочек 8 класса и дату рождения выводит в формате: день Название месяца.

select name,day(data),  'Месяц'=case month(data)

when 1 then 'Янв'

when 2 then 'Фев'

when 3 then 'Март'

when 4 then 'Дек'

else

'pppp'

end

from piple

Обработка ошибок.

Виды ошибок

1.  Аварийное завершение приложения

2.  Не вызывают прерывания работы приложения – «побочные»

3.  Ошибки в алгоритмах, не нарушающие работу приложения.

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

Задание 10. Применение оператора Return.

·  Создайте и выполните хранимую процедуру, представленную на рис.1. Определите, где завершилась процедура.

create procedure procReturn

as