МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)
Лабораторная работа №8
по дисциплине
«Базы данных и экспертные системы»
подготовил:
студент группы А-13-08
Ганишев В.
проверил:
Сидорова Н.П.
Цель:
Практически освоить создание и использование сложных (с элементами программирования) хранимых процедур.
Научиться использовать хранимые процедуры для выполнения двумерных и трехмерных статистических запросов.
Задание 1
Выдать статистику по городам и специальностям вашего государства. Очет должен начинаться заголовком и цифрой - общим количеством записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: ГОРОД <название> - ВСЕГО <цифра> (где <цифра> не равна нулю), а заканчивается перечнем шифров специальностей с цифрами, не равными нулю.
alter procedure spe @ac integer output as
declare @gor char(20)
declare @sp char(6)
declare @sc integer
declare @gc integer
declare @gor1 char(20)
declare y cursor for
select vuz_gorod.nazvanie_goroda, spec, count(*)
from bel join vuz_gorod on cod_vuza = vuz_k
group by vuz_gorod.nazvanie_goroda, spec
order by vuz_gorod.nazvanie_goroda
select @gc = 0
select @ac = 0
open y
fetch y into @gor, @sp, @sc
if(@@FETCH_STATUS = -2) begin
print 'Ошибка при выполнении первого FETCH'
close y
return
end
if(@@FETCH_STATUS = -1) begin
print 'Данные не найдены'
close y
return
end
select @gor1 = @gor
print @sp+' -'+str(@sc)
select @gc = @gc + @sc
select @ac = @ac + @sc
while (@@FETCH_STATUS = 0)
begin
fetch y into @gor, @sp, @sc
if (@gor != @gor1) begin
print 'Город ' + @gor1 + ' - ' + str(@gc)
select @gor1 = @gor
select @gc = 0
end
if (@@FETCH_STATUS = -1) break
print @sp + ' - ' + str(@sc)
select @gc = @gc + @sc
select @ac = @ac + @sc
end
close y
if (@@FETCH_STATUS = -2) begin
print 'Ошибка при выполнении FETCH'
return
end
print 'Город ' + @gor + ' - ' + str(@gc)
print '---------------------------'
print'всего по запросу - ' + str(@ac)
deallocate y
return
declare @count int
exec spe @count out
print 'всего по запросу -'+str(@count)
Задание 2
Выдать статистику по городам и учебным заведениям вашего государства. Отчет должен начинаться соответствующим заголовком. Далее должна следовать совокупность таблиц, каждая из которых включает перечень учебных заведений одного города с цифрами, не равными нулю (последняя строка таблицы представляет собой:ГОРОД <название> - ВСЕГО <цифра>, где <цифра> не равна 0). Заканчивается отчет цифрой - общим количеством записей по запросу.
create procedure vu as
declare @gor char(20)
declare @vu char(25)
declare @vc integer
declare @gc integer
declare @ac integer
declare @gor1 char(20)
declare y cursor for
select vuz_gorod.nazvanie_goroda, vuz_gorod.nazvanie_vuza, count(*)
from bel join vuz_gorod on cod_vuza = vuz_k
group by vuz_gorod.nazvanie_goroda, vuz_gorod.nazvanie_vuza
order by vuz_gorod.nazvanie_goroda
select @gc = 0
select @ac = 0
open y
fetch y into @gor, @vu, @vc
if(@@FETCH_STATUS = -2) begin
print 'Ошибка при выполнении первого FETCH'
close y
return
end
if(@@FETCH_STATUS = -1) begin
print 'Данные не найдены'
close y
return
end
select @gor1 = @gor
print @vu+' -'+str(@vc)
select @gc = @gc + @vc
select @ac = @ac + @vc
while (@@FETCH_STATUS = 0)
begin
fetch y into @gor, @vu, @vc
if (@gor != @gor1) begin
print 'Город ' + @gor1 + ' - ' + str(@gc)
print '----------------------------'
select @gor1 = @gor
select @gc = 0
end
if (@@FETCH_STATUS = -1) break
print @vu + ' - ' + str(@vc)
select @gc = @gc + @vc
select @ac = @ac + @vc
end
close y
if (@@FETCH_STATUS = -2) begin
print 'Ошибка при выполнении FETCH'
return
end
print 'Город ' + @gor + ' - ' + str(@gc)
print '---------------------------'
print'всего по запросу - ' + str(@ac)
deallocate y
return
vu