ноненоеое. БД.Иэоз 66-21.Чуфаринов.Н.А.. Министерство общего и профессионального образования российской федерации
Скачать 4.3 Mb.
|
Задание 10Выдать статистику по выпуску 1993 года вашего государства по всем учебным заведениям и специальностям. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу (выпуску 1993 г.). Далее перечень таблиц, где каждая таблица начинается с заголовка: <название учебного заведения> - <цифра>, не равная нулю, а заканчивается перечнем шифров специальностей с цифрами, не равными нулю. create procedure z10 as declare @yz char (25) declare @sp char (6) declare @it1 int declare @it2 int declare @itall int declare @yz1 char (25) declare y cursor for select vuz.uch_zavedenie, spec, count (*) from uzb join vuz on vuz_k=vuz.cod where gok='93' group by vuz.uch_zavedenie, spec order by vuz.uch_zavedenie, spec select @it2=0 select @itall=0 open y fetch y into @yz, @sp, @it1 if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ close y return end if (@@fetch_status=-1) begin print ‘Данные не найдены’ close y return end select @yz1=@yz print @sp+' -'+str(@it1) select @it2=@it2+@it1 select @itall=@itall+@it1 while (@@fetch_status=0) begin fetch y into @yz, @sp, @it1 if (@yz1 !=@yz) begin print 'учебное заведение' + @yz1 + ' - ' +str(@it2) select @yz1=@yz select @it2=0 end if (@@fetch_status=-1) break print @sp + ' - ' +str(@it1) select @it2=@it2+@it1 select @itall=@itall+@it1 end close y if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ return end print 'учебное заведение' + @yz + ' - ' +str(@it2) print '----------------------------------' print 'всего по запросу-'+str(@itall) deallocate y Задание 11Выдать статистику по приему 1991 года вашего государства по всем категориям обучения и городам. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу (по приему 91-го года). Далее совокупность таблиц, где каждая таблица начинается с заголовка: <название категории обучения> - <цифра>, не равная нулю, а заканчивается перечнем названий городов с цифрами, не равными нулю. create procedure z11(@godp char(2)) as declare @ng char (20) declare @ko char(16) declare @it1 int declare @it2 int declare @itall int declare @ko1 char (16) declare y cursor for select kat_obucheniya, vuz_gorod.nazvanie_goroda, count (*) from uzb join vuz_gorod on vuz_k = cod_vuza join kat_obuch on kat_obuch_k = kat_obuch.cod where gp=@godp group by kat_obucheniya, vuz_gorod.nazvanie_goroda order by kat_obucheniya, vuz_gorod.nazvanie_goroda select @it2=0 select @itall=0 open y fetch y into @ko, @ng, @it1 if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ close y return end if (@@fetch_status=-1) begin print ‘Данные не найдены’ close y return end select @ko1=@ko print @ng+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 while (@@fetch_status=0) begin fetch y into @ko, @ng, @it1 if (@ko1 != @ko) begin print 'Категория обучения' + @ko1 + ' - ' +str(@it2, 4) select @ko1=@ko select @it2=0 end if (@@fetch_status=-1) break print @ng+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 end close y if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ return end print 'Категория обучения' + @ko + ' - ' + str(@it2, 4) print '-----------------------------------------------------------' print 'Всего- '+str(@itall, 4) +deallocate y return Задание 12Выдать статистику по специальностям и городам вашего государства. Отчет должен начинаться заголовком и цифрой - общим количеством записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем названий городов с цифрами, не равными нулю. create procedure z12 as declare @ng char (20) declare @sp char(16) declare @it1 int declare @it2 int declare @itall int declare @sp1 char (16) declare y cursor for select spec, vuz_gorod.nazvanie_goroda, count (*) from uzb join vuz_gorod on vuz_k = cod_vuza group by spec, vuz_gorod.nazvanie_goroda order by spec, vuz_gorod.nazvanie_goroda select @it2=0 select @itall=0 open y fetch y into @sp, @ng, @it1 if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ close y return end if (@@fetch_status=-1) begin print ‘Данные не найдены’ close y return end select @sp1=@sp print @ng+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 while (@@fetch_status=0) begin fetch y into @sp, @ng, @it1 if (@sp1 != @sp) begin print 'Специальность ' + @sp1 + ' - ' +str(@it2, 4) select @sp1=@sp select @it2=0 end if (@@fetch_status=-1) break print @ng+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 end close y if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ return end print 'Специальность ' + @sp + ' - ' + str(@it2, 4) print '-----------------------------------------------------------' print 'Всего- '+str(@itall, 4) deallocate y return Задание 13Выдать статистику по городам и годам окончания вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: ГОРОД <название> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем годов окончания с цифрами, не равными нулю. create procedure z13 as declare @gk char (2) declare @ng char(20) declare @it1 int declare @it2 int declare @itall int declare @ng1 char (20) declare y cursor for select vuz_gorod.nazvanie_goroda, gok , count (*) from uzb join vuz_gorod on vuz_k = cod_vuza group by gok, vuz_gorod.nazvanie_goroda order by gok, vuz_gorod.nazvanie_goroda select @it2=0 select @itall=0 open y fetch y into @ng, @gk, @it1 if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ close y return end if (@@fetch_status=-1) begin print ‘Данные не найдены’ close y return end select @ng1=@ng print @gk+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 while (@@fetch_status=0) begin fetch y into @ng, @gk, @it1 if (@ng1 != @ng) begin print 'Город ' + @ng1 + ' - ' +str(@it2, 4) select @ng1=@ng select @it2=0 end if (@@fetch_status=-1) break print @gk+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 end close y if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ return end print 'Город ' + @ng + ' - ' + str(@it2, 4) print '-----------------------------------------------------------' +print 'Всего- '+str(@itall, 4) deallocate y return Задание 14Выдать статистику по лицам мужского пола вашего государства по всем городам и учебным заведениям. Отчет должен начинаться соответствующим заголовком. Далее должна следовать совокупность таблиц, каждая из которых включает перечень учебных заведений одного города с цифрами, не равными нулю (последняя строка таблицы представляет собой: ГОРОД <название> - ВСЕГО <цифра>, где <цифра> ^= 0). Заканчивается отчет цифрой - общим количеством записей по запросу (т. е. всего мужчин). create procedure z14 as declare @yz char (25) declare @ng char(20) declare @it1 int declare @it2 int declare @itall int declare @ng1 char (20) declare y cursor for select vuz_gorod.nazvanie_goroda, vuz.uch_zavedenie , count (*) from uzb join vuz_gorod on vuz_k = cod_vuza join vuz on vuz_k=vuz.cod where pol = 'М' group by vuz.uch_zavedenie, vuz_gorod.nazvanie_goroda order by vuz.uch_zavedenie, vuz_gorod.nazvanie_goroda select @it2=0 select @itall=0 open y fetch y into @ng, @yz, @it1 if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ close y return end if (@@fetch_status=-1) begin print ‘Данные не найдены’ close y return end select @ng1=@ng print @yz+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 while (@@fetch_status=0) begin fetch y into @ng, @yz, @it1 if (@ng1 != @ng) begin print 'Город ' + @ng1 + ' - ' +str(@it2, 4) select @ng1=@ng select @it2=0 end if (@@fetch_status=-1) break print @yz+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 end close y if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ return end print 'Город ' + @ng + ' - ' + str(@it2, 4) print '-----------------------------------------------------------' print 'Всего- '+str(@itall, 4) deallocate y return Задание 15Выдать статистику по специальностям и учебным заведениям вашего государства. Отчет должен начинаться с заголовка и цифры - общего количества записей по запросу. Далее совокупность таблиц, где каждая таблица начинается с заголовка: СПЕЦИАЛЬНОСТЬ <шифр> - ВСЕГО <цифра>, не равная нулю, а заканчивается перечнем названий учебных заведений с цифрами, не равными нулю. create procedure z15 as declare @yz char (25) declare @sp char(16) declare @it1 int declare @it2 int declare @itall int declare @sp1 char (16) declare y cursor for select spec, vuz.uch_zavedenie, count (*) from uzb join vuz on vuz_k = vuz.cod group by spec, vuz.uch_zavedenie order by spec, vuz.uch_zavedenie select @it2=0 select @itall=0 open y fetch y into @sp, @yz, @it1 if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ close y return end if (@@fetch_status=-1) begin print ‘Данные не найдены’ close y return end select @sp1=@sp print @yz+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 while (@@fetch_status=0) begin fetch y into @sp, @yz, @it1 if (@sp1 != @sp) begin print 'Специальность ' + @sp1 + ' - ' +str(@it2, 4) select @sp1=@sp select @it2=0 end if (@@fetch_status=-1) break print @yz+' - '+str(@it1, 4) select @it2=@it2+@it1 select @itall=@itall+@it1 end close y if (@@fetch_status=-2) begin print ‘Ошибка при выполнении первого FETCH’ return end print 'Специальность ' + @sp + ' - ' + str(@it2, 4) print '-----------------------------------------------------------' print 'Всего- '+str(@itall, 4) deallocate y return + ЛАБОРАТОРНАЯ РАБОТА №9 Задание 1 Создать триггер на проверку правильности ввода значений в поле «Год приема» (значения от ‘00’ до ‘99’) вашей информационной таблицы; значения этого поля должно быть задано в отдельной таблице вашей БД. create table uzb3 (nomer integer, fio char (40) not null, data_rogden char (6), pol char (1), sem_polog_k char (1), spec char (6), kat_obuch_k char (2), vuz_k integer, mp char (2), gp char (2), mo char (2), gok char (2)) create table codgp (gpkod char(2)) declare @i integer set @i = 0 while (@i < 99) begin insert into codgp values(@i) set @i = @i + 1 end create trigger main_trig on uzb3 for insert as if (select count(*) from codgp, inserted where codgp.gpkod=inserted.gp)=0 select ‘Недопустимое значение поля gp’ Задание 2. Создать 3 отдельных триггера (для операторов INSERT, UPDATE и DELETE) для автоматического внесения изменений в таблицу VUZ (поля «Код вуза» и «Название вуза»), если вносятся такие же изменения в таблицу VUZ_GOROD. create trigger insert_trig on vuz_gorod for insert as declare @r int, @c char(25) select @r= cod from inserted select @c= uch_zavedenie from inserted insert into vuz(cod_vuza, nazvanie_vuza) values (@r,@c) create trigger delete_trig on vuz_gorod for delete as declare @r int, @c char(25) select @r= cod_vuza from deleted select @c= nazvanie_vuza from deleted delete from vuz where cod=@r and uch_zavedenie=@c create trigger update_trig on vuz_gorod for update as declare @r int, @c char(25) declare @r_n int, @c_n char(25) select @r= cod_vuza from deleted select @c= nazvanie_vuza from deleted select @r_n= cod_vuza from inserted select @c_n= nazvanie_vuza from inserted update vuz set cod=@r_n, uch_zavedenie= @c_n where vuz.cod=@r and vuz.uch_zavedenie=@c Свой триггер create trigger insert_trig2 on vuz_gorod for insert as declare @g char(25), @a int; select @g = nazvanie_goroda from inserted; select @a = count(*) from gorod where (nazvanie_goroda = @g); if (@a = 0) insert into gorod(nazvanie_goroda) values (@g) insert vuz_gorod(cod_vuza, nazvanie_vuza, nazvanie_goroda) values (1020, 'Инст1', 'МСК') + |