Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы (2011) / Ганишев / Лабораторная работа 8.docx
Скачиваний:
43
Добавлен:
28.06.2014
Размер:
261.1 Кб
Скачать

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

Лабораторная работа №8

по дисциплине

«Базы данных и экспертные системы»

подготовил:

студент группы А-13-08

Ганишев В.

проверил:

Сидорова Н.П.

Цель:

  1. Практически освоить создание и использование сложных (с элементами программирования) хранимых процедур.

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

Задание 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