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

quản lý thông tin báo cáo bài tập thực hành buổi 2 tham số vào là msgv tengv sodt diachi mshh namhh

18 0 0
Tài liệu đã được kiểm tra trùng lặp

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Quản lý thông tin báo cáo bài tập thực hành buổi 2
Tác giả Lâm Tấn Nhật Minh
Người hướng dẫn Nguyễn Gia Tuấn Anh, Phạm Nhật Duy
Trường học Đạ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
Chuyên ngành Khoa học và Kỹ thuật Thông tin
Thể loại Bài tập thực hành
Năm xuất bản 2024
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 18
Dung lượng 321,32 KB

Nội dung

CREATE PROC SP_INSERTGV_MSHH @MSGV INT, @TENGV NVARCHAR30, @SODT VARCHAR10, @DIACHI NVARCHAR50, @MSHH INT, @NAMHH SMALLDATETIME AS BEGIN IF NOT EXISTS SELECT * FROM HOCHAM WHERE MSHH = @

Trang 1

ĐẠ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

QUẢN LÝ THÔNG TIN BÁO CÁO BÀI TẬP THỰC HÀNH BUỔI 2

GVHD: Nguyễn Gia Tuấn Anh

Phạm Nhật Duy

Lớp: IE103.O23.CNVN Sinh viên thực hiện: Lâm Tấn Nhật Minh 22520863

 Tp Hồ Chí Minh, 02/2024 

Trang 2

-PHAN A -

Câu 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 PROC SP_INSERTGV_MSHH

@MSGV INT, @TENGV NVARCHAR(30), @SODT VARCHAR(10),

@DIACHI NVARCHAR(50), @MSHH INT, @NAMHH SMALLDATETIME

AS

BEGIN

IF NOT EXISTS (SELECT * FROM HOCHAM WHERE MSHH = @MSHH)

BEGIN

PRINT N'MSHH KO TON TAI' RETURN 0

END

INSERT INTO GIAOVIEN VALUES (@MSGV, @TENGV, @DIACHI, @SODT,

@MSHH, @NAMHH)

PRINT N'THEM THANH CONG'

END

1.1 THUC THI

INSERT KO THANH CONG

EXEC SP_INSERTGV_MSHH @MSGV=00555, @TENGV=N'Nguyễn Thị C',

@DIACHI=N'TPHCM', @SODT='0123456789', @MSHH=4, @NAMHH='2010'

INSERT THANH CONG

EXEC SP_INSERTGV_MSHH 00999, N'Đỗ Phúc', '0987654321', N'Huế', 2, '2022'

1.2 KIEM TRA

SELECT * FROM GIAOVIEN

1.3 KHOI PHUC DU LIEU

Trang 3

DELETE FROM GIAOVIEN WHERE MSGV = 00999

1.4 XOA

DROP PROC SP_INSERTGV_MSHH

Câu 2 Tham số vào là MSGV, TENGV, SODT, DIACHI, MSHH, NAMHH Trước khi insert dữ liệu cần kiểm tra MSGV trong table GIAOVIEN có trùng không, nếu trùng thì trả về giá trị 0

CREATE PROC INSERTGV

@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)

BEGIN

PRINT 'MSGV DA TON TAI' RETURN 0

END

INSERT INTO GIAOVIEN VALUES (@MSGV, @TENGV, @DIACHI, @SODT,

@MSHH, @NAMHH)

PRINT 'THEM THANH CONG'

END

2.1 THUC THI

INSERT KHONG THANH CONG

EXEC INSERTGV @MSGV=00201, @TENGV=N'Nguyễn Thị C', @DIACHI=N'TPHCM',

@SODT='0123456789', @MSHH=4, @NAMHH='2010'

INSERT THANH CONG

Trang 4

EXEC INSERTGV @MSGV=00999, @TENGV=N'Nguyễn Thị C', @DIACHI=N'TPHCM',

@SODT='0123456789', @MSHH=2, @NAMHH='2010'

2.2 KIEM TRA

SELECT * FROM GIAOVIEN

2.3 KHOI PHUC DU LIEU

DELETE FROM GIAOVIEN WHERE MSGV = 00999

2.4 XOA

DROP PROC INSERTGV

Câu 3 Giống (1) và (2) kiểm tra xem MSGV có trùng không? MSHH có tồn tại chưa? Nếu MSGV trùng thì trả về 0 Nếu MSHH chưa tồn tại trả về 1, ngược lại cho insert dữ liệu

CREATE PROC INSERTGV2

@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)

BEGIN

PRINT 'MSGV DA TON TAI' RETURN 0

END

ELSE IF NOT EXISTS (SELECT * FROM HOCHAM WHERE MSHH = @MSHH)

BEGIN

PRINT N'MSHH KO TON TAI' RETURN 0

END

Trang 5

INSERT INTO GIAOVIEN VALUES (@MSGV, @TENGV, @DIACHI, @SODT,

@MSHH, @NAMHH)

PRINT 'THEM THANH CONG'

END

3.1 THUC THI

TH1: MSGV TRÙNG

EXEC INSERTGV2 @MSGV=00201, @TENGV=N'Nguyễn Thị C',

@DIACHI=N'TPHCM', @SODT='0123456789', @MSHH=2, @NAMHH='2010'

TH2: MSHH CHƯA TỒN TẠI

EXEC INSERTGV2 @MSGV=00998, @TENGV=N'Nguyễn Thị C',

@DIACHI=N'TPHCM', @SODT='0123456789', @MSHH=4, @NAMHH='2010'

TH3: THEM THANH CONG

EXEC INSERTGV2 @MSGV=00999, @TENGV=N'Nguyễn Thị C',

@DIACHI=N'TPHCM', @SODT='0123456789', @MSHH=2, @NAMHH='2010'

3.2 KIEM TRA

SELECT * FROM GIAOVIEN

3.3 KHOI PHUC DU LIEU

DELETE FROM GIAOVIEN WHERE MSGV = 00999

3.4 XOA

DROP PROC INSERTGV2

Câu 4 Đưa vào MSDT cũ, TENDT mới Hãy cập nhật tên đề tài mới với mã đề tài

cũ không đổi nếu không tìm thấy trả về 0, ngược lại cập nhật và trả về 1

CREATE PROC INSERT_DT

@MSDT CHAR(6), @TENDETAI NVARCHAR(30)

Trang 6

AS

BEGIN

IF NOT EXISTS (SELECT * FROM DETAI WHERE @MSDT = MSDT)

BEGIN

PRINT 'MSDT KHONG TON TAI' RETURN 0

END

UPDATE DETAI

SET TENDT = @TENDETAI

WHERE MSDT = @MSDT

RETURN 1

END

4.1 THUC THI

TH1: MSDT KHONG TON TAI

EXEC INSERT_DT @MSDT = 97999, @TENDETAI = 'HOC MAY'

TH2: THANH CONG

EXEC INSERT_DT @MSDT = 97005, @TENDETAI = 'HOC MAY'

4.2 KIEM TRA

SELECT * FROM DETAI WHERE MSDT = 97005

4.3 KHOI PHUC DU LIEU

EXEC INSERT_DT @MSDT = 97005, @TENDETAI = N'Xử lý ảnh'

4.4 XOA

DROP PROC INSERT_DT

Trang 7

Câu 5 Tham số đưa vào MSSV, TENSV mới, DIACHI mới Hãy cập nhật sinh viên trên với MSSV không đổi, nếu không tìm thấy trả về 0, ngược lại cập nhật và trả

về 1

CREATE PROC INSERT_SV

@MSSV INT, @TENSV NVARCHAR(30), @DIACHI NCHAR(30)

AS

BEGIN

IF NOT EXISTS (SELECT * FROM SINHVIEN WHERE MSSV = @MSSV)

BEGIN

PRINT 'MSSV KHONG TON TAI' RETURN 0

END

UPDATE SINHVIEN

SET TENSV = @TENSV,

DIACHI = @DIACHI WHERE MSSV = @MSSV

PRINT 'CAP NHAT THANH CONG'

RETURN 1

END

5.1 THUC THI

TH1 MSSV KHONG TON TAI

EXEC INSERT_SV @MSSV = 13529999, @TENSV = 'NGUYENVANA', @DIACHI = 'THU DUC'

TH2 THANH CONG

EXEC INSERT_SV @MSSV = 13520001, @TENSV = 'NGUYENVANA', @DIACHI = 'THU DUC'

5.2 KIEM TRA

SELECT* FROM SINHVIEN

Trang 8

5.3 KHOI PHUC DU LIEU

EXEC INSERT_SV @MSSV = 13520001, @TENSV = N'Nguyễn Văn An', @DIACHI = N'THỦ ĐỨC'

5.4 XOA

DROP PROC INSERT_SV

-PHAN B -

Câu 1 Đưa vào TENHV trả ra: Số GV thỏa học vị, nếu không tìm thấy trả về 0

CREATE PROC SP_SOGVTHOAHOCVI @TENHV NVARCHAR(20), @SOGV INT

OUTPUT

AS

BEGIN

IF NOT EXISTS (SELECT * FROM HOCVI WHERE TENHV = @TENHV)

BEGIN

SET @SOGV = 0 PRINT N'TENHV KO TON TAI' END

ELSE

BEGIN

SELECT @SOGV = COUNT(DISTINCT MSGV) FROM GV_HV_CN, HOCVI

WHERE GV_HV_CN.MSHV = HOCVI.MSHV AND TENHV =

@TENHV

END END

1.1 THUC THI VA KIEM TRA

DECLARE @SOGV INT, @TENHV NVARCHAR(20)

SET @TENHV = N'Thạc sĩ'

Trang 9

EXEC SP_SOGVTHOAHOCVI @TENHV, @SOGV OUTPUT

PRINT N'Số GV có học vị ' + @TENHV + N' là: ' + CAST(@SOGV AS VARCHAR)

1.2 XOA

DROP PROC SP_SOGVTHOAHOCVI

Câu 2 Đưa vào MSDT cho biết: Điểm trung bình của đề tài, nếu không tìm thấy trả về 0

CREATE PROC AVERAGE_DIEMDT

@MSDT CHAR (6), @DTB FLOAT OUTPUT

AS

BEGIN

IF NOT EXISTS (SELECT * FROM DETAI WHERE MSDT = @MSDT)

BEGIN

PRINT 'MSDT KHONG TON TAI' RETURN 0

END

SELECT @DTB = ((SUM(GV_HDDT.DIEM) + SUM(GV_PBDT.DIEM)+

SUM(GV_UVDT.DIEM)) / (count(GV_HDDT.DIEM) + count(GV_PBDT.DIEM)+

count(GV_UVDT.DIEM)))

FROM DETAI, GV_HDDT, GV_PBDT, GV_UVDT

WHERE GV_HDDT.MSDT = @MSDT AND GV_PBDT.MSDT = @MSDT AND

GV_UVDT.MSDT = @MSDT

RETURN 1

END

2.1 THUC THI VA KIEM TRA

DECLARE @DTB FLOAT, @MSDT CHAR(6)

SET @MSDT = 97005

EXEC AVERAGE_DIEMDT @MSDT, @DTB OUTPUT

Trang 10

PRINT N'Điểm trung bình của đề tài có mã số ' + @MSDT + N' là: ' + CAST(@DTB AS VARCHAR)

2.2 XOA

DROP PROC AVERAGE_DIEMDT

Câu 3 Đưa vào TENGV trả ra: SDT của giáo viên đó, nếu không tìm thấy trả về 0 Nếu trùng tên thì có báo lỗi không? Tại sao? Làm sao để hiện thông báo có bao nhiêu giáo viên trùng tên và trả về các SDT

CREATE PROC GV_SDT

@TENGV NVARCHAR(30), @SODT NVARCHAR(30) OUTPUT, @SOGVTRUNG INT OUTPUT

AS

BEGIN

KIỂM TRA XEM CÓ BAO NHIÊU GIÁO VIÊN TRÙNG TÊN

SELECT @SOGVTRUNG = COUNT(*)

FROM GIAOVIEN

WHERE TENGV = @TENGV

IF @SOGVTRUNG = 0

BEGIN

SET @SODT = 0

RETURN 0

END

CÓ NHIỀU GIÁO VIÊN TRÙNG TÊN

IF @SOGVTRUNG > 1

BEGIN

SET @SODT = N'Có nhiều sdt khớp với tên giáo viên trên'

SELECT SODT

FROM GIAOVIEN

Trang 11

WHERE TENGV = @TENGV

END

CHỈ CÓ 1 GIÁO VIÊN TRÙNG TÊN

ELSE

BEGIN

SELECT @SODT = SODT

FROM GIAOVIEN

WHERE TENGV = @TENGV

END

END

***Với đoạn lệnh sql trên thì khi có nhiều giáo viên có trùng tên, nó sẽ đưa ra bảng gồm nhiều tên và sdt, trong dòng message sẽ in ra biến @SODT đã gán vào chuỗi ký tự thông báo là có nhiều giáo viên trùng tên Còn nếu chỉ có 1 tên khớp thì nó sẽ đưa ra sdt của người đó ngay

3.1 THUC THI

TH1 CO 1 GIAO VIEN

DECLARE @TENGV NVARCHAR(30), @SODT VARCHAR(30), @SOGVTRUNG INT SET @TENGV = N'Trần Trung'

EXEC GV_SDT @TENGV, @SODT OUTPUT, @SOGVTRUNG OUTPUT

PRINT @SODT

TH2 CO 2 GIAO VIEN

INSERT INTO GIAOVIEN VALUES (00206,N'Trần Trung',N'Bến

Tre','757283593',1,'1996')

DECLARE @TENGV NVARCHAR(30), @SODT NVARCHAR(30), @SOGVTRUNG INT SET @TENGV = N'Trần Trung'

EXEC GV_SDT @TENGV, @SODT OUTPUT, @SOGVTRUNG OUTPUT

PRINT @SODT

3.2 KHOI PHUC DU LIEU

Trang 12

DELETE FROM GIAOVIEN

WHERE MSGV = 00206

3.3 XOA

DROP PROC GV_SDT

Câu 4 Đưa vào MSHD cho biết: Điểm trung bình các đề tài của hội đồng đó

CREATE PROC AVERAGE_DT_DIEM @MSHD INT, @DTB FLOAT OUTPUT

AS

BEGIN

SELECT @DTB = ((SUM(hd.DIEM) + SUM(uv.DIEM)+ SUM(pb.DIEM)) /

(count(hd.DIEM) + count(uv.DIEM)+ count(pb.DIEM)))

FROM HOIDONG , GV_HDDT HD, GV_PBDT PB,GV_UVDT UV

WHERE HOIDONG.MSGV=HD.MSGV AND HOIDONG.MSGV=UV.MSGV AND HOIDONG.MSGV=PB.MSGV AND HOIDONG.MSHD=@MSHD

END

4.1 THUC THI

DECLARE @MSHD INT, @DTB FLOAT

SET @MSHD = 1

EXEC AVERAGE_DT_DIEM @MSHD, @DTB OUTPUT

PRINT @DTB

4.2 XOA

DROP PROC AVERAGE_DT_DIEM

Câu 5 Đưa vào TENGV cho biết: Số đề tài hướng dẫn, số đề tài phản biện do giáo viên đó phụ trách Nếu trùng tên thì có báo lỗi không hay hệ thống sẽ đếm tất cả các đề tài của những giáo viên trùng tên đó?

-PHAN C -

Câu 1 Tạo Trigger thỏa mãn điều kiện khi xóa một đề tài sẽ xóa các thông tin liên quan

CREATE TRIGGER TRIG_XOATHONGTINDETAI

Trang 13

ON DETAI

INSTEAD OF DELETE

AS

BEGIN

DECLARE @MSDT CHAR(6)

SELECT @MSDT = MSDT FROM DELETED

XOA CAC BANG LIEN QUAN

DELETE SV_DETAI WHERE MSDT = @MSDT

DELETE GV_HDDT WHERE MSDT = @MSDT

DELETE GV_PBDT WHERE MSDT = @MSDT

DELETE GV_UVDT WHERE MSDT = @MSDT

DELETE HOIDONG_DT WHERE MSDT = @MSDT

XOA BANG DETAI

DELETE DETAI WHERE MSDT = @MSDT

END

1.1 KIEM TRA

SELECT * FROM DETAI

SELECT * FROM HOIDONG_DT

DELETE FROM DETAI WHERE MSDT = '97005'

1.2 KHOI PHUC DU LIEU

INSERT INTO DETAI VALUES('97005',N'Xử lý ảnh')

INSERT INTO SV_DETAI VALUES('13520002','97005')

INSERT INTO SV_DETAI VALUES('13520006','97005')

INSERT INTO GV_HDDT VALUES(00203,'97005',9)

Trang 14

INSERT INTO GV_PBDT VALUES(00201,'97005',8)

INSERT INTO GV_UVDT VALUES(00205,'97005',8)

INSERT INTO GV_UVDT VALUES(00202,'97005',7)

INSERT INTO GV_UVDT VALUES(00204,'97005',9)

INSERT INTO HOIDONG_DT VALUES(1,'97005',N'Được')

1.3 XOA

DROP TRIGGER TRIG_XOATHONGTINDETAI

Câu 2 Tạo Trigger thỏa mãn ràng buộc là khi đổi 1 mã số giáo viên (MSGV) thì

sẽ thay đổi các thông tin liên quan

CREATE TRIGGER UPDATE_MSGV

ON GIAOVIEN

AFTER UPDATE

AS

BEGIN

IF UPDATE(MSGV)

BEGIN

DECLARE @MSGV CHAR(6), @OLD CHAR(6)

SELECT @MSGV = MSGV FROM INSERTED

SELECT @OLD = MSGV FROM DELETED

UPDATE GV_HV_CN

SET MSGV = @MSGV

WHERE MSGV = @OLD

UPDATE GV_HDDT

SET MSGV = @MSGV

WHERE MSGV = @OLD

Trang 15

UPDATE GV_PBDT

SET MSGV = @MSGV

WHERE MSGV = @OLD

UPDATE GV_UVDT

SET MSGV = @MSGV

WHERE MSGV = @OLD

UPDATE HOIDONG_GV

SET MSGV = @MSGV

WHERE MSGV = @OLD

END

2.1 KIEM TRA

SELECT * FROM GIAOVIEN

SELECT * FROM GV_UVDT

UPDATE GIAOVIEN

SET MSGV = 00999

WHERE MSGV = 00201

2.2 XOA

DROP TRIGGER UPDATE_MSGV

Câu 3 Tạo Trigger thỏa mãn ràng buộc là một hội đồng không quá 10 đề tài Dùng “Group by” có được không? Giải thích

CREATE TRIGGER HD_KHONGQUA_10DT

ON HOIDONG_DT

FOR INSERT

AS

BEGIN

DECLARE @MSHD INT

Trang 16

SELECT @MSHD = MSHD FROM INSERTED

IF(SELECT COUNT(*) FROM HOIDONG_DT WHERE MSHD = @MSHD GROUP BY MSHD) > 10

BEGIN

PRINT 'HOI DONG NAY KHONG DUOC QUA 10 DE TAI'

ROLLBACK TRANSACTION

END

END

***Dùng group by được vì ta dùng hàm count để đếm số đề tài mà hội đồng đó đăng kí nên sẽ cần GROUP BY MSHD

3.1 KIEM TRA

-VI TALBE DETAI KHONG CO DU SO LUONG DE TAI DANG KI

INSERT DETAI VALUES ('97007',N'Quản lý thư viện'),

('97008',N'Quản lý thư viện'),

('97009',N'Quản lý thư viện'),

('97010',N'Quản lý thư viện'),

('97011',N'Quản lý thư viện');

INSERT HOIDONG_DT VALUES (1,'97003',N'Được'),

(1,'97004',N'Được'),

(1,'97006',N'Được'),

(1,'97007',N'Được'),

(1,'97008',N'Được'),

(1,'97009',N'Được'),

(1,'97010',N'Được'),

(1,'97011',N'Được');

DELETE HOIDONG_DT WHERE MSDT IN

('97003','97004','97006','97007','97008','97009','97010','97011');

DELETE DETAI WHERE MSDT IN ('97007','97008','97009','97010','97011');

3.2 XOA

DROP TRIGGER HD_KHONGQUA_10DT

-PHAN D -

Câu 1 Viết hàm tính điểm trung bình của một đề tài Giá trị trả về là điểm trung bình ứng với mã số đề tài nhập vào

CREATE FUNCTION TINH_DTB_DT (@MSDT CHAR(6))

RETURNS FLOAT

AS

Trang 17

BEGIN

DECLARE @DTB FLOAT

SELECT @DTB = ((SUM(HD.DIEM) + SUM(UV.DIEM)+ SUM(PB.DIEM)) /

(count(HD.DIEM) + count(UV.DIEM)+ count(PB.DIEM)))

FROM DETAI DT, GV_HDDT HD, GV_PBDT PB,GV_UVDT UV

WHERE DT.MSDT=HD.MSDT AND DT.MSDT=PB.MSDT AND

DT.MSDT=UV.MSDT AND DT.MSDT= @MSDT

RETURN @DTB

END

1.1 KIEM TRA THONG QUA CAU 2 CO SU DUNG FUNCTION TREN

1.2 XOA

DROP FUNCTION TINH_DTB_DT

Câu 2 Trả về kết quả của đề tài theo MSDT nhập vào Kết quả là DAT nếu như điểm trung bình từ 5 trở lên, và KHONGDAT nếu như điểm trung bình dưới 5

CREATE FUNCTION KETQUADT(@MSDT CHAR(6))

RETURNS VARCHAR(10)

AS

BEGIN

DECLARE @DTB FLOAT

SELECT @DTB = DBO.TINH_DTB_DT(MSDT)

FROM DETAI

WHERE MSDT = @MSDT

IF(@DTB >= 5)

RETURN 'DAT'

RETURN 'KHONG DAT'

END

2.1 KIEMTRA

DECLARE @MSDT CHAR(6)

SET @MSDT = 97001

PRINT DBO.TINH_DTB_DT(@MSDT)

Trang 18

2.2 XOA

DROP FUNCTION KETQUADT

Ngày đăng: 21/05/2024, 16:23

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w