1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lab2 Quản lý thông tin IE103 UIT

7 221 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Nội dung

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA KHOA HỌC VÀ KĨ THUẬT THÔNG TIN BÁO CÁO LAB 02 – THỰC HÀNH MÔN QUẢN LÝ THÔNG TIN GVHD Lưu Thanh Sơn Tp Hồ Chí Minh, 032022 A STORED PROCEDUREDS VỚI THAM SỐ VÀO 1 Tham số vào là MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH Trước khi insert dữ liệu cần kiểm tra MSHH đã tồn tại trong table HOCHAM chưa, nếu chưa thì trả về giá trị 0 CREATE PROCEDURE THEM GV MSGV int, TENGV nvarchar(30), SODT varchar(10), DIACHI nvarchar(50).

ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN KHOA KHOA HỌC VÀ KĨ THUẬT THÔNG TIN BÁO CÁO LAB 02 – THỰC HÀNH MÔN QUẢN LÝ THÔNG TIN GVHD: Lưu Thanh Sơn  Tp Hồ Chí Minh, 03/2022  A STORED PROCEDUREDS VỚI THAM SỐ VÀO Tham số vào MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH Trước insert liệu cần kiểm tra MSHH tồn table HOCHAM chưa, chưa trả giá trị CREATE PROCEDURE THEM_GV @MSGV int, @TENGV nvarchar(30), @SODT varchar(10), @DIACHI nvarchar(50), @MSHH int, @NAMHH smalldatetime as begin if exists (select * from HOCHAM where MSHH = @MSHH) insert into GIAOVIEN (MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH) values (@MSGV, @TENGV, @SODT, @DIACHI, @MSHH, @NAMHH) else print '0' end Tham số vào MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH Trước insert liệu cần kiểm tra MSGV table GIAOVIEN có trùng khơng, trùng trả giá trị CREATE PROCEDURE THEM_GV2 @MSGV int, @TENGV nvarchar(30), @SODT varchar(10), @DIACHI nvarchar(50), @MSHH int, @NAMHH smalldatetime as begin if exists (select * from GIAOVIEN where MSGV = @MSGV) print '0' else insert into GIAOVIEN (MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH) values (@MSGV, @TENGV, @SODT, @DIACHI, @MSHH, @NAMHH) end Giống (1) (2) kiểm tra xem MSGV có trùng khơng? MSHH có tồn chưa? Nếu MSGV trùng trả Nếu MSHH chưa tồn trả 1, ngược lại cho insert liệu CREATE PROCEDURE THEM_GV3 @MSGV int, @TENGV nvarchar(30), @SODT varchar(10), @DIACHI nvarchar(50), @MSHH int, @NAMHH smalldatetime as begin if exists (select * from GIAOVIEN where MSGV = @MSGV) print '0' else if not exists (select * from HOCHAM where MSHH = @MSHH) print '1' else insert into GIAOVIEN (MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH) values (@MSGV, @TENGV, @SODT, @DIACHI, @MSHH, @NAMHH) end B STORED PROCEDUREDS VỚI THAM SỐ VÀO VÀ RA Đưa vào TENHV trả ra: Số GV thỏa học vị, khơng tìm thấy trả create procedure SO_GV_HV @TENHV nvarchar(20), @SLGV int OUTPUT as begin select @SLGV = COUNT(MSGV) from GV_HV_CN inner join HOCVI on GV_HV_CN.MSHV = HOCVI.MSHV where TENHV = @TENHV end declare @a int set @a = exec SO_GV_HV N'Cử nhân', @a output print @a Đưa vào MSDT cho biết: Điểm trung bình đề tài, khơng tìm thấy trả create procedure TINHDTB @MSDT char(6), @DIEMTB float OUTPUT as begin select @DIEMTB = (SUM(GV_HDDT.DIEM) + SUM(GV_PBDT.DIEM) + SUM(GV_UVDT.DIEM)) / (count(GV_HDDT.MSGV) + count(GV_PBDT.MSGV) + count(GV_UVDT.MSGV)) from DETAI as A inner join GV_HDDT on A.MSDT = GV_HDDT.MSDT inner join GV_UVDT on A.MSDT = GV_UVDT.MSDT inner join GV_PBDT on a.MSDT = GV_PBDT.MSDT where A.MSDT = @MSDT if (@DIEMTB is null) set @DIEMTB = end C TRIGGER Tạo Trigger thỏa mãn điều kiện xóa đề tài xóa thơng tin liên quan create trigger DEL_DETAI on DETAI INSTEAD OF DELETE AS BEGIN Xoa cac du lieu lien quan toi de tai chuan bi xoa declare @MSDT char(6) select @MSDT = MSDT from deleted Xoa du lieu tung bang voi MSDT vua tim duoc tu deleted delete from SV_DETAI where MSDT = @MSDT delete from GV_HDDT where MSDT = @MSDT delete from GV_PBDT where MSDT = @MSDT delete from GV_UVDT where MSDT = @MSDT delete from HOIDONG_DT where MSDT = @MSDT END delete from DETAI where MSDT = @MSDT Tạo Trigger thỏa mãn ràng buộc hội đồng không q 10 đề tài Dùng “Group by” có khơng? Giải thích create trigger INS_UP_DETAI on HOIDONG_DT instead of insert as begin declare @DEMDT int, @A int, @B char(6),@C nchar(10) select @A=MSHD,@B=MSDT,@C=QUYETDINH from inserted select @DEMDT = COUNT(inserted.MSDT) from inserted, HOIDONG_DT where inserted.MSHD = HOIDONG_DT.MSHD if(@DEMDT >= 10) print 'Mot hoi dong khong duoc qua 10 de tai' else begin insert into HOIDONG_DT(MSHD,MSDT,QUYETDINH) end values (@A,@B,@C) print 'Them cong' end Dùng “Group by” “group by” nhóm “MSHD” theo nhóm dùng “having” để tính số đề tài theo “MSHD”, làm sử dụng “group by” trình bày bên dưới: create trigger INS_UP_DETAI2 on HOIDONG_DT for insert as begin if exists ( begin end else select inserted.MSHD, count(inserted.MSDT) from inserted join HOIDONG_DT on inserted.MSHD = HOIDONG_DT.MSHD group by inserted.MSHD having count(inserted.MSDT) > 10 ) rollback print 'Mot hoi dong khong duoc qua 10 de tai' print 'Them cong' end D FUNCTION Viết hàm tính điểm trung bình đề tài Giá trị trả điểm trung bình ứng với mã số đề tài nhập vào create function TINH_DTB (@MSDT char(6)) returns float as begin declare @DIEM float select @DIEM = (SUM(GV_HDDT.DIEM) + SUM(GV_PBDT.DIEM) + SUM(GV_UVDT.DIEM)) / (count(GV_HDDT.MSGV) + count(GV_PBDT.MSGV) + count(GV_UVDT.MSGV)) from DETAI as A inner join GV_HDDT on A.MSDT = GV_HDDT.MSDT inner join GV_UVDT on A.MSDT = GV_UVDT.MSDT inner join GV_PBDT on a.MSDT = GV_PBDT.MSDT where A.MSDT = @MSDT if (@DIEM is null) set @DIEM = end return @DIEM Trả kết đề tài theo MSDT nhập vào Kết DAT điểm trung bình từ trở lên, KHONGDAT điểm trung bình create function F_KETQUA (@MSDT char(6)) returns char(10) as begin end declare @KETQUA char(10) declare @DTB float set @DTB = dbo.TINH_DTB(@MSDT) if (@DTB >= 5) SET @KETQUA = N'DAT' else SET @KETQUA = N'KHONGDAT' return @KETQUA E CURSOR Tạo bảng tên DETAI_DIEM Cấu trúc bảng sau: DETAI_DIEM(MSDT, DIEMTB) Viết Cursor tính điểm trung bình cho đề tài Sau lưu kết vào bảng DETAI_DIEM create table DETAI_DIEM ( MSDT char(6) primary key, DIEMTB float ) Khai bao tro declare p CURSOR for select MSDT, TENDT, dbo.TINH_DTB(MSDT) as DiemTB from DETAI Thiet lap gia tri tro declare @A char(6), @T nvarchar(30), @C float open p Lay dong dau tien fetch p into @A, @T, @C Kiem tra xem co du lieu hay khong, neu co thi lay va tiep tuc duyet cac dong tiep theo while (@@fetch_status = 0) begin insert into DETAI_DIEM (MSDT, DIEMTB) values (@A, round(@C, 2)) fetch next from p into @A, @T, @C end Dong tro close p ... output print @a Đưa vào MSDT cho biết: Điểm trung bình đề tài, khơng tìm thấy trả create procedure TINHDTB @MSDT char(6), @DIEMTB float OUTPUT as begin select @DIEMTB = (SUM(GV_HDDT.DIEM) + SUM(GV_PBDT.DIEM)... (@DIEMTB is null) set @DIEMTB = end C TRIGGER Tạo Trigger thỏa mãn điều kiện xóa đề tài xóa thơng tin liên quan create trigger DEL_DETAI on DETAI INSTEAD OF DELETE AS BEGIN Xoa cac du lieu lien... điểm trung bình đề tài Giá trị trả điểm trung bình ứng với mã số đề tài nhập vào create function TINH_DTB (@MSDT char(6)) returns float as begin declare @DIEM float select @DIEM = (SUM(GV_HDDT.DIEM)

Ngày đăng: 16/06/2022, 23:12

TỪ KHÓA LIÊN QUAN

w