(@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
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.