BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ TP. HCM (HUTECH)
BÁO CÁO CUỐI KÌ
ORACLE
Đề tài:
QUẢN LÝ ĐÁNH GIÁ
ĐIỂM RÈN LUYỆN SINH VIÊN
Giảng viên hướng dẫn : ThS. Võ Hoàng Khang
Sinh viên thực hiện : Nhóm 12
Lê Thị Phượng MSSV: 1051020186
Nguyễn Nhật Khánh MSSV: 0951020115
TP. Hồ Chí Minh, 2015
2QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
MỤC LỤC
CHƯƠNG 1 - TỔNG QUAN..........................................................................................5
1.1. Giới thiệu...........................................................................................................5
1.2. Lý do chọn đề tài...............................................................................................5
CHƯƠNG 2 - PHÂN TÍCH HỆ THỐNG.......................................................................6
2.1. Xác định các loại thực thể..................................................................................6
2.2. Mô hình thực thể kết hợp (ERD).....................................................................10
2.3. Mô hình ERD biểu diễn bằng Case Studio......................................................11
2.4. Mô hình quan hệ..............................................................................................11
2.5. Xác định các ràng buộc toàn vẹn.....................................................................12
2.5.1. Ràng buộc toàn vẹn trên bối cảnh một quan hệ............................................12
2.5.2. Ràng buộc toàn vẹn trên bối cảnh nhiều quan hệ.........................................18
CHƯƠNG 3 - THIẾT KẾ.............................................................................................24
3.1. Tạo CSDL........................................................................................................24
3.2. Tạo các bảng và các ràng buộc toàn vẹn (RBTV)...........................................29
3.2.1. Tạo bảng và khóa chính................................................................................29
3.2.2. Tạo khóa ngoại.............................................................................................37
3.2.3. Các ràng buộc toàn vẹn................................................................................39
3.3. Thực thi các chức năng cơ bản........................................................................43
3.3.1. Tạo các View................................................................................................43
3.3.2. Tạo các Procedure........................................................................................46
3.3.3. Tạo các Function..........................................................................................62
3.3.4. Tạo các Trigger.............................................................................................69
CHƯƠNG 4 - ỨNG DỤNG..........................................................................................75
GVHD: VÕ HOÀNG KHANG
3QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
Lời cảm ơn
Để hoàn thành báo cáo cuối kì môn học này, nhóm em xin tỏ lòng biết ơn sâu sắc
đến thầy Võ Hoàng Khang đã tận tình hướng dẫn và giúp đỡ trong suốt quá trình học
tập và làm đề tài “Quản lý đánh giá điểm rèn luyện sinh viên”. Cứ mỗi tuần lý thuyết
và thực hành, thầy hướng dẫn sửa chữa những sai sót và bổ sung thêm những kiến thức
cần thiết để chúng em có nhiều kinh nghiệm hơn trong quá trình xây dựng đề tài.
Chính nhờ điều đó đã góp phần rất lớn để chúng em hoàn thành báo cáo có thể kịp tiến
độ nhanh hơn và kĩ hơn, phân tích đề tài rõ ràng cụ thể hơn rất nhiều nên giờ nhóm em
mới hoàn thành được báo cáo cuối kì môn ORACLE này.
Nhóm em cũng xin chân thành cám ơn quý Thầy, Cô trong khoa Công Nghệ
Thông Tin đã tận tình truyền đạt kiến thức cho em. Với kiến thức đã làm nền tảng rất
lớn để chúng em có thể tìm hiểu và phát triển bản thân nhiều hơn trong việc học tập
cũng như làm nên đề tài này.
Cuối cùng, nhóm em xin chúc thầy Võ Hoàng Khang và quý Thầy, Cô dồi dào sức
khỏe và thành công trong sự nghiệp cao quý.
Nhóm em xin chân thành cảm ơn!
Tp.HCM, ngày 22 tháng 06 năm 2014
Nhóm Sinh viên thực hiện
Nhóm 12
GVHD: VÕ HOÀNG KHANG
4QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CHƯƠNG 1 - TỔNG QUAN
1.1. Giới thiệu
Nhằm giúp giữa sinh viên và khoa, trường thuận tiện trong việc đánh giá và tự
đánh giá rèn luyện cho sinh viên, giảm bớt qui trình và thời gian cho việc đánh giá
rèn luyện trên các biểu mẫu in trên giấy như trước giờ, thay thế vào đó phần mềm
“Quản lý đánh giá điểm rèn luyện sinh viên” giúp sinh viên có thể tự đánh giá rèn
luyện cho bản thân trực tiếp trên website ở bất cứ đâu có kết nối mạng internet
bằng tài khoản được nhà trường cấp cho mỗi sinh viên. Sau khi sinh viên tự đánh
giá xong, thì lần lượt những cấp bậc cao hơn sẽ đánh giá lại và chốt kết quả cho
sinh viên đó. Cuối cùng, lớp trưởng, khoa, trường xét duyệt và thống kê xếp loại
cho tất cả sinh viên.
Dữ liệu về quá trình đánh giá rèn luyện sinh viên được đưa vào bảng điểm cá nhân
của sinh viên chính xác. Đồng thởi đảm bảo công tác lưu trữ luôn thống nhất, ổn
định và đầy đủ, thể hiện tính khách quan và công bằng cho người học
1.2. Lý do chọn đề tài
Trong quá trình thực hiện công cuộc công nghiệp hóa, hiện đại hóa hiện nay
của đất nước thì việc áp dụng công nghệ thông tin vào các hoạt động đang được
đẩy mạnh qua đó qua đó giúp rút ngắn thời gian làm việc và tránh sai sót. Một
trong những ngành đi đầu trong việc áp dụng công nghệ thông tin vào các hoạt
động là ngành giáo dục. Do đó việc áp dụng công nghệ thông tin vào các trường
Cao đẳng và Đại học cũng không phải ngoại lệ. Một trong những công việc đòi hỏi
sự chính xác vì ảnh hưởng đến lợi ích của sinh viên là việc đánh giá điểm rèn
luyện, trong khi đó nếu thực hiện đánh giá rèn luyện của sinh viên bằng phương
pháp thủ công sẽ tốn rất nhiều thời gian và dễ gây sai sót vì thế giải pháp đưa ra là
tạo 1 phần mềm có thể để sinh viên tự đánh giá điểm rèn luyện trên website để tiết
kiệm thời gian cho cả sinh viên, ban cán sự lớp và cả nhà trường.
Từ đó nhóm em đã tìm hiểu và thực hiện đề tài “Phần mềm hỗ trợ đánh giá rèn
luyện sinh viên”
GVHD: VÕ HOÀNG KHANG
5QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CHƯƠNG 2 - PHÂN TÍCH HỆ THỐNG
2.1. Xác định các loại thực thể
Loại thực thể cơ bản
o HỌC KÌ
o TIÊU CHÍ
o LOẠI TIÊU CHÍ
o LOẠI SINH VIÊN
Loại thực thể đối tượng ngoài
o TÀI KHOẢN
o KHOA
o LỚP
o TỔ
o SINH VIÊN
o KHÓA HỌC
Loại thực thể nghiệp vụ
o PHIẾU ĐÁNH GIÁ
o THOI HAN DANH GIA
TAIKHOAN (ID, Password, MaQuyen, TenQuyen)
Mô tả: Bao gồm thông tin cơ bản cho tài khoản của sinh viên, lớp, khoa,
trường
- ID: Mã tài khoản
- Password: Mật khẩu
- MaQuyen: Mã quyền
- TenQuyen: Tên quyền (Sinh viên, tổ trưởng, lớp trưởng, Khoa
CNTT, …)
KHOAHOC (MaKH, TenKH, NamBD)
Mô tả: Bao gồm thông tin cơ bản về các khóa học
GVHD: VÕ HOÀNG KHANG
6QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
- MaKH: Mã khóa học (1013, 1014, 1114, 1115, …)
- HeDaoTao: Hệ đào tạo (Đại học chính quy, Cao đẳng chính quy)
- NamBD: Năm bắt đầu
KHOA (MaKhoa, TenKhoa)
Mô tả: Bao gồm thông tin cơ bản về các khoa trong trường
- MaKhoa: Mã khoa
- TenKhoa: Tên khoa
LOP (MaLop, TenLop, SiSo, NamKT)
Mô tả: Bao gồm các lớp trong cùng một khóa. Lớp sẽ tổng hợp lại phần
đánh giá của các tổ trong lớp mình. Sau đó đánh giá riêng
- MaLop: Mã lớp
- TenLop: Tên lớp
- SiSo: Sĩ số
- NamKT: Năm kết thúc
TO (MaTo, TenTo, SoLuong)
Mô tả: Bao gồm các tổ trong cùng một lớp. Trong một lớp sẽ chia thành
nhiều tổ. Mỗi tổ sẽ có nhiệm vụ đánh giá đạo đức các thành viên trong tổ
mình
- MaTo: Mã tổ
- TenTo: Tên tổ
- SoLuong: Số lượng
LOAISV (MaLSV, TenLSV)
Mô tả: Đề phân biệt những sinh viên là Đoàn viên, Hội viên hay Đảng
viên, ta có 1 bảng loại sinh viên
- MaLSV: Mã loại sinh viên
- TenLSV: Tên loại sinh viên (Đảng viên, Đoàn viên, Hội viên)
SINHVIEN (MaSV, HoTen, GioiTinh, NgaySinh, NoiSinh, ChucVu)
GVHD: VÕ HOÀNG KHANG
7QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
Mô tả: Bao gồm các thông tin cơ bản của một sinh viên. Cuối mỗi học
kì, sinh viên sẽ tự đánh giá điểm rèn luyện cho mình
- MaSV: Mã sinh viên
- HoTen: Họ tên
- GioiTinh: Giới tính
- NgaySinh: Ngày sinh
- NoiSinh: Nơi sinh
- ChucVu: Chức vụ học tập
HOCKI (MaHK, TenHK, NamHoc, NgayBD_DG, NgayKT_DG, TinhTrang)
Mô tả: Đề phân biệt giữa các học kì với nhau, và cho biết học kì đó đang
chấm điểm rèn luyện
- MaHK: Mã học kì (HK1, HK2)
- TenHK: Tên học kì (Học kì 1, Học kì 2)
- NamHoc: Năm học (2010 – 2011, 2011 – 2012, …)
- NgayBD_DG: Ngày bắt đầu đánh giá
- NgayKT_DG: Ngày kết thúc đánh giá
- TinhTrang: Tình trạng (Đang chấm)
THOIHANDG (MaTH, TuNgay, DenNgay, Quyen)
- MaTH: Mã thời hạn
- TuNgay: Từ ngày
- DenNgay: Đến ngày
- Quyen: Quyền (0: Sinh viên, 1: Tổ trưởng, 2: Lớp trưởng, 3:
Khoa, 4: Phòng CTSV)
LOAITIEUCHI (MaLTC, TenLTC, DiemToiDa)
Mô tả: Việc đánh giá sinh viên sẽ dựa trên những loại tiêu chí, những
tiêu chí này sẽ được chia thành các loại khác nhau
- MaLTC: Mã loại tiêu chí
- TenLTC: Tên loại tiêu chí
- DiemToiDa: Điểm tối đa
GVHD: VÕ HOÀNG KHANG
8QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
TIEUCHI (MaTC, NoiDungTC, DiemToiDa)
Mô tả: Bao gồm các tiêu chí để đánh giá đạo đức của sinh viên. Trong
mỗi loại tiêu chí sẽ có them những tiêu chí đánh giá cụ thể
- MaTC: Mã tiêu chí
- NoiDungTC: Nội dung tiêu chí
- DiemToiDa: Điểm tối đa
PHIEUDANHGIA (MaPDG, NgayLap, TongDiem_SV, TongDiem_To,
TongDiem_Lop, XepLoai)
Mô tả: Sau khi đánh giá rèn luyện cho mỗi sinh viên, sẽ tạo ra 1 phiếu
đánh giá có đầy đủ thông tin đã đánh giá cho sinh viên đó
- MaPDG: Mã phiếu đánh giá
- NgayLap: Ngày lập phiếu đánh giá
- TongDiem_SV: Tổng điểm do cá nhân sinh viên tự chấm
- TongDiem_To: Tổng điểm do tổ chấm
- TongDiem_Lop: Tổng điểm cho lớp chấm
- XepLoai: Xếp loại
GVHD: VÕ HOÀNG KHANG
9QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
2.2. Mô hình thực thể kết hợp (ERD)
GVHD: VÕ HOÀNG KHANG
THOIHANDG
TO
HOCKI
Có
Của
Thuộc
Thuộc
Có
Thuộc
KHOA
KHOAHOC TAIKHOAN
Có
LOP Thuộc
PHIEUDANHGIASINHVIEN
CT_LOAISV
LOAISV
LOAITIEUCHI TIEUCHI
(1,n)
(1,1)
(1,1)
(1,n)
(1,n)
(1,1)(1,n)
(1,n)
(1,1)(1,1)
(1,n)
(1,n)
(1,n)
(1,n) (1,1)
(1,1)
(1,1)
(1,n)
(1,n)
(1,1)
CTDG
10QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
2.3. Mô hình ERD biểu diễn bằng Case Studio
2.4. Mô hình quan hệ
o TAIKHOAN (ID, Password, MaQuyen, TenQuyen)
o KHOAHOC (MaKH, HeDaoTao, NamBD)
o KHOA (MaKhoa, TenKhoa)
o LOP (MaLop, MaKhoa, MaKH, TenLop, SiSo, NamKT)
GVHD: VÕ HOÀNG KHANG
11QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o TO (MaTo, TenTo, MaLop, SoLuong)
o LOAISV (MaLSV, TenLSV)
o SINHVIEN (MaSV, HoTen, GioiTinh, NgaySinh, NoiSinh, ChucVu,
MaTo)
o HOCKI (MaHK, TenHK, NamHoc, NgayBD_DG, NgayKT_DG,
TinhTrang)
o THOIHANDG (MaTH, MaHK, NamHoc, TuNgay, DenNgay, Quyen)
o LOAITIEUCHI (MaLTC, TenLTC, DiemToiDa)
o TIEUCHI (MaTC, MaLTC, NoiDungTC, DiemToiDa)
o PHIEUDANHGIA (MaPDG, MaSV, MaHK, NamHoc, NgayLap,
TongDiem_SV, TongDiem_To, TongDiem_Lop, XepLoai)
o CT_LOAISV (MaSV, MaLSV)
o CTDG (MaPDG, MaTC, Diem_SV, NhanXet_SV, Diem_To,
NhanXet_To, Diem_Lop, NhanXet_Lop)
2.5. Xác định các ràng buộc toàn vẹn
2.5.1. Ràng buộc toàn vẹn trên bối cảnh một quan hệ
2.5.1.1 Ràng buộc toàn vẹn miền giá trị
R1: Giới tính của sinh viên chỉ là Nam hoặc là Nữ.
o Nội dung: SV SINHVIEN: SV.GioiTinh {‘Nam’, ‘Nữ’}
o Bối cảnh: SINHVIEN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
SINHVIEN + - +(GioiTinh)
R2: Điểm tối đa của loại tiêu chí phải lớn hơn 0 và nhỏ hơn 100
o Nội dung: LTC LOAITIEUCHI: 0<LTC.DiemToiDa
<100
o Bối cảnh:LOAITIEUCHI
GVHD: VÕ HOÀNG KHANG
12QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOAITIEUCHI + - +(DiemToiDa)
R3: Điểm tối đa của tiêu chí phải lớn hơn 0 và nhỏ hơn 100
o Nội dung: TC TIEUCHI: 0 <TC.DiemToiDa < 100
o Bối cảnh: TIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
TIEUCHI + - +(DiemToiDa)
R4: Xếp loại của Phiếu đánh giá chỉ là Xuất sắc, Tốt, Khá, TBKhá, Yếu,
Kém
o Nội dung: PDG PHIEUDANHGIA: PDG.XepLoai
{‘Xuất sắc’, ‘Tốt’,’Khá’, ‘Trung Bình Khá’,
’TB’,’Yếu’,’Kém’}
o Bối cảnh: PHIEUDANHGIA
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
PHIEUDANHGIA + - +(XepLoai)
R5: Tình trạng của Học kì chỉ là Đang chấm hoặc ko có giá trị
o Nội dung: HK HOCKI : HK.TinhTrang {‘Đang chấm’,
NULL }
o Bối cảnh: HOCKI
GVHD: VÕ HOÀNG KHANG
13QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
HOCKI + - +(TinhTrang)
R6: Sĩ số sinh viên trong một lớp phải lớn hơn không
o Nội dung: L LOP: L.SiSo > 0
o Bối cảnh: LOP
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOP + - +(SiSo)
R7: Tên loại sinh viên của Loại sinh viên chỉ là Đảng viên, Đoàn Viên,
Hội Viên
o Nội dung: LSV LOAISV: LSV.TenLSV {‘Đảng viên’,
‘Đoàn Viên’,’Hoi Vien’}
o Bối cảnh: LOAISV
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOAISV + - +(TenLSV)
R8: Tên học kì của Học kì chỉ là Học kì 1, Học kì 2
o Nội dung: HK HOCKI: HK.TenHK {‘Học kì 1’, ‘Học
Kì 2’}
o Bối cảnh: HOCKI
GVHD: VÕ HOÀNG KHANG
14QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
HOCKI + - +(TenHK)
R9: Mã học kì của Học kì chỉ là HK1, HK2
o Nội dung: HK HOCKI: HK.MaHK {‘HK1’, ‘HK2’}
o Bối cảnh: HOCKI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
HOCKI + - +(MaHK)
R10: Mã sinh viên của Sinh viên có ít nhất là 10 ký tự và nhiều nhất 12
ký tự
o Nội dung: SV SINHVIEN: Len(SV.MASV) [10..12]
o Bối cảnh: SINHVIEN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
SINHVIEN + - +(MaSV)
2.5.1.2 Ràng buộc toàn vẹn liên bộ
R11: Mỗi lớp có một mã số để phân biệt với nhau.
o Nội dung: LOP1, LOP2 LOP:
Nếu LOP1 ≠ LOP2 thì LOP1.MaLop ≠ LOP2.MaLop
o Bối cảnh: LOP
o Bảng tầm ảnh hưởng:
GVHD: VÕ HOÀNG KHANG
15QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
Thêm Xóa Sửa
LOP + - -(*)
R12: Mỗi khoa có một mã số để phân biệt với nhau.
o Nội dung: KHOA1, KHOA2 KHOA:
Nếu KHOA1 ≠ KHOA2 thì KHOA1.MaKhoa ≠
KHOA2.MaKhoa
o Bối cảnh: KHOA
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
KHOA + - -(*)
R13: Mỗi khóa học có một mã số để phân biệt với nhau.
o Nội dung: KHOC1, KHOC2 KHOAHOC:
Nếu KHOC1 ≠ KHOC2 thì KHOC1.MaKH ≠
KHOC2.MaKH
o Bối cảnh: KHOAHOC
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
KHOAHOC + - -(*)
R14: Mỗi Sinh viên có một mã số để phân biệt với nhau.
o Nội dung: SV1, SV2 SINHVIEN:
Nếu SV1 ≠ SV2 thì SV1.MaSV ≠ SV2.MaSV
GVHD: VÕ HOÀNG KHANG
16QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bối cảnh: SINHVIEN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
SINHVIEN + - -(*)
R15: Mỗi Thời hạn đánh giá có một mã số để phân biệt với nhau.
o Nội dung: TH1, TH2 THOIHANDG:
Nếu TH1 ≠ TH2 thì TH1.MaTH ≠ TH2.MaTH
o Bối cảnh: THOIHANDG
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
THOIHANDG + - -(*)
R16: Mỗi Phiếu đánh giá có một mã số để phân biệt với nhau.
o Nội dung: PDG1, PDG2 PHIEUDANHGIA:
Nếu PDG1 ≠ PDG2 thì PDG1.MaPDG ≠ PDG2.MaPDG
o Bối cảnh: PHIEUDANHGIA
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
PHIEUDANHGIA + - -(*)
R17: Mỗi Loại tiêu chí có một mã số để phân biệt với nhau.
o Nội dung: LTC1, LTC2 LAOITIEUCHI:
Nếu LTC1 ≠ LTC2 thì LTC1.MaLTC ≠ LTC2.MaLTC
GVHD: VÕ HOÀNG KHANG
17QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bối cảnh: LOAITIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOAITIEUCHI + - -(*)
R18: Mỗi Tiêu chí có một mã số để phân biệt với nhau.
o Nội dung: TC1, TC2 TIEUCHI:
Nếu TC1 ≠ TC2 thì TC1.MaTC ≠ TC2.MaTC
o Bối cảnh: TIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
TIEUCHI + - -(*)
R19: Mỗi Tổ có một mã để phân biệt với nhau.
o Nội dung: TO1, TO2 TO:
Nếu TO1 ≠ TO2 thì TO1.MaTo ≠ TO2.MaTo
o Bối cảnh: TO
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
TO + - -(*)
2.5.1.3 Ràng buộc toàn vẹn liên thuộc tính
R20: Ngày bắt đầu đánh giá (TuNgay) phải nhỏ hơn ngày kết thúc đánh
giá (DenNgay)
o Nội dung: DG THOIHANDG : DG.TuNgay <
DG.DenNgay
GVHD: VÕ HOÀNG KHANG
18QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bối cảnh: THOIHANDG
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
THOIHANDG + - +(TuNgay,DenNgay)
2.5.2. Ràng buộc toàn vẹn trên bối cảnh nhiều quan hệ
2.5.2.1 Ràng buộc toàn vẹn tham chiếu
R21: RBTV về khóa ngoại giữa Lớp và Khoa
o Nội dung: LOP[MaKhoa] KHOA[MaKhoa]
o Bối cảnh: LOP, KHOA
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOP + - -(*)
KHOA - + -(*)
R22: RBTV về khóa ngoại giữa Tiêu chí và Loại tiêu chí
o Nội dung: TIEUCHI[MaLTC] LOAITIEUCHI[MaLTC]
o Bối cảnh: TIEUCHI, LOAITIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
TIEUCHI + - -(*)
LOAITIEUCHI - + -(*)
R23: RBTV về khóa ngoại giữa Sinh viên và Phiếu đánh giá
o Nội dung: PHIEUDANHGIA[MaSV] SINHVIEN[MaSV]
GVHD: VÕ HOÀNG KHANG
19QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
o Bối cảnh: PHIEUDANHGIA, SINHVIEN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
PHIEUDANHGIA + - -(*)
SINHVIEN - + -(*)
R24: RBTV về khóa ngoại giữa Lớp và Khóa học
o Nội dung: LOP[MaKH] KHOAHOC[MaKH]
o Bối cảnh: LOP, KHOAHOC
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOP + - -(*)
KHOAHOC - + -(*)
R25: RBTV về khóa ngoại giữa Sinh viên và Tổ
o Nội dung: SINHVIEN[MaTo] TO[MaTo]
o Bối cảnh: SINHVIEN, TO
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
SINHVIEN + - -(*)
TO - + -(*)
GVHD: VÕ HOÀNG KHANG
20QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
R26: RBTV về khóa ngoại giữa chi tiết đánh giá sinh viên, phiếu đánh
giá và tiêu chí
o Nội dung: CTDG_SV[MaPDG]
PHIEUDANHGIA[MaPDG]
Và CTDG_SV[MaTC] TIEUCHI[MaTC]
o Bối cảnh: CTDG_SV, PHIEUDANHGIA, TIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
CTDG_SV + - -(*)
PHIEUDANHGIA - + -(*)
TIEUCHI - + -(*)
R27: RBTV về khóa ngoại giữa chi tiết đánh giá tổ, phiếu đánh giá và
tiêu chí
o Nội dung: CTDG_TO[MaPDG]
PHIEUDANHGIA[MaPDG]
Và CTDG_TO[MaTC] TIEUCHI[MaTC]
o Bối cảnh: CTDG_TO, PHIEUDANHGIA, TIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
CTDG_TO + - -(*)
PHIEUDANHGIA - + -(*)
GVHD: VÕ HOÀNG KHANG
21QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
TIEUCHI - + -(*)
R28: RBTV về khóa ngoại giữa chi tiết đánh giá lớp, phiếu đánh giá và
tiêu chí
o Nội dung: CTDG_LOP[MaPDG]
PHIEUDANHGIA[MaPDG]
Và CTDG_LOP[MaTC] TIEUCHI[MaTC]
o Bối cảnh: CTDG_LOP, PHIEUDANHGIA, TIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
CTDG_LOP + - -(*)
PHIEUDANHGIA - + -(*)
TIEUCHI - + -(*)
R29: RBTV về khóa ngoại giữa chi tiết loại sinh viên , loại sinh viên và
sinh viên
o Nội dung: CT_LOAISV[MaSV] SINHVIEN[MaSV]
Và CT_LOAISV[MaLSV] LOAISV[MaLSV]
o Bối cảnh: CT_LOAISV, LOAISV, SINHVIEN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
CT_LOAISV + - -(*)
GVHD: VÕ HOÀNG KHANG
22QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
LOAISV - + -(*)
SINHVIEN - + -(*)
2.5.2.2 Ràng buộc toàn vẹn liên thuộc tính
R30: Điểm tối đa của tiêu chí phải nhỏ hơn điểm tối đa của loại tiêu chí
o Nội dung: TC TIEUCHI
Nếu LTC LOAITIEUCHI: LTC.MALTC =
TC.MALTC
thì LTC.DiemToiDa > TC.DiemToiDa
o Bối cảnh: TIEUCHI,LOAITIEUCHI
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
TIEUCHI - + +( DiemToiDa)
LOAITIEUCHI + - +( DiemToiDa)
R31: Năm KT khóa học của 1 lớp phỉa lớn hơn năm BD khóa học tương
ứng
o Nội dung: L LOP
Nếu KH KHOAHOC: KH.MaKH = L.MaKH
thì KH.NamBD < L.NamKT
o Bối cảnh: LOP,KHOAHOC
o Bảng tầm ảnh hưởng:
GVHD: VÕ HOÀNG KHANG
23QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
Thêm Xóa Sửa
LOP - + +( NamKT)
KHOAHOC + - +( NamBD)
R32: Sô lượng sinh viên của mọt tổ thuộc một lớp không được lớn hơn sĩ
số của lớp tương ứng
o Nội dung: T TO
Nếu L LOP: T.MaLop = L.MaLop
thì T.SoLuong < L.SiSo
o Bối cảnh: LOP,KHOAHOC
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
TO - + +( SoLuong)
LOP + - +( SiSo)
2.5.2.3 Ràng buộc toàn vẹn do thuộc tính tổng hợp
R33: Sĩ số của một lớp là số lượng sinh viên thuộc lớp đó
o Nội dung: L LOP : L.SiSo=COUNT(SV SINHVIEN:
SV.MaLop=L.MaLop)
o Bối cảnh: LOP,SINHVIEN
o Bảng tầm ảnh hưởng:
Thêm Xóa Sửa
LOP + - +( SiSo)
SINHVIEN + + +( MaLop)
GVHD: VÕ HOÀNG KHANG
24QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CHƯƠNG 3 - THIẾT KẾ
3.1. Tạo CSDL
o TAIKHOAN
TAIKHOAN
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 ID Varchar2(12) PK
2 Password Varchar2(50)
3 MaQuyen Varchar2(10)
4 TenQuyen NVarchar2(100)
o KHOAHOC
KHOAHOC
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaKH Varchar2(20) PK
2 TenKH NVarchar2(50) NotNull
3 NamBD Number NotNull
o KHOA
KHOA
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaKhoa Varchar2(10) PK
2 TenKhoa NVarchar2(50) NotNull
o LOP
LOP
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaLop Varchar2(10) PK
2 MaKhoa Varchar2(10) FK
GVHD: VÕ HOÀNG KHANG
25QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
3 MaKH Varchar2(10) FK
4 TenLop NVarchar2(100) NotNull
5 SiSo Number NotNull
6 NamKT Number NotNull
o TO
TO
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaTo Varchar2(10) PK
2 TenTo NVarchar2(50) NotNull
o LOAISV
LOAISV
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaLSV Varchar2(10) PK
2 TenLSV NVarchar2(50) NotNull
o SINHVIEN
SINHVIEN
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaSV Varchar2(12) PK
2 HoTen NVarchar2(100) NotNull
3 GioiTinh NVarchar2(10) NotNull
GVHD: VÕ HOÀNG KHANG
26QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
4 NgaySinh Date NotNull
5 NoiSinh NVarchar2(200) NotNull
6 ChucVu NVarchar2(30)
7 MaTo Varchar2(10) FK
o HOCKI
HOCKI
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaHK Varchar2(10) PK
2 TenHK NVarchar2(30) NotNull
3 NamHoc Varchar2(30) PK
4 NgayBD_DG Date NotNull
5 NgayKT_DG Date NotNull
6 TinhTrang NVarchar2(50)
o THOIHANDG
THOIHANDK
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaTH Varchar2(10) PK
2 MaHK NVarchar2(30) NotNull
3 NamHoc Varchar2(30) PK
4 TuNgay Date NotNull
5 DenNgay Date NotNull
6 Quyen Number NotNull
o LOAITIEUCHI
LOAITIEUCHI
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaLTC Varchar2(10) PK
2 TenLTC NVarchar2(2000) NotNull
GVHD: VÕ HOÀNG KHANG
27QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
3 DiemToiDa Number
o TIEUCHI
TIEUCHI
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaTC Varchar2(20) PK
2 NoiDungTC NVarchar2(2000) NotNull
3 DiemToiDa Number
4 MaLTC Varchar2(10) FK
o PHIEUDANHGIA
PHIEUDANHGIA
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaPDG Varchar2(10) PK
2 MaSV Varchar2(12) FK
3 MaHK Varchar2(10) FK
4 NamHoc Varchar2(30) FK
5 NgayLap Date
6 TongDiem_SV Number
7 TongDiem_To Number
8 TongDiem_Lop Number
9 XepLoai NVarchar2(50)
o CT_LOAISV
CT_LOAISV
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaSV Varchar2(12) PFK
2 MaLSV Varchar2(10) PFK
o CTDG
GVHD: VÕ HOÀNG KHANG
28QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CTDG_SV
STT Thuộc tính Kiểu dữ liệu Ràng buộc
1 MaPDG Varchar2(10) PFK
2 MaTC Varchar2(10) PFK
3 Diem_SV Number
4 NhanXet_SV NhanXet_Lop
5 Diem_To Number
6 NhanXet_To NhanXet_Lop
7 Diem_Lop Number
8 NhanXet_Lop NhanXet_Lop
3.2. Tạo các bảng và các ràng buộc toàn vẹn (RBTV)
3.2.1. Tạo bảng và khóa chính
-- Table LOP
CREATE TABLE "LOP"(
"MaLop" Varchar2(10 ) NOT NULL,
"MaKhoa" Varchar2(10 ),
"MaKH" Varchar2(20 ),
"TenLop" NVarchar2(100) NOT NULL,
"SiSo" Number,
"NamKT" Number NOT NULL
)
/
-- Add keys for table LOP
ALTER TABLE "LOP" ADD CONSTRAINT "PK_MALOP" PRIMARY KEY
("MaLop")
/
GVHD: VÕ HOÀNG KHANG
29QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
-- Table HOCKI
CREATE TABLE "HOCKI"(
"MaHK" Varchar2(10 ) NOT NULL,
"TenHK" NVarchar2(30) NOT NULL,
"NamHoc" Varchar2(30 ) NOT NULL,
"NgayBD_DG" Date NOT NULL,
"NgayKT_DG" Date NOT NULL,
"TinhTrang" NVarchar2(50)
)
/
-- Add keys for table HOCKI
ALTER TABLE "HOCKI" ADD CONSTRAINT "PK_MAHK_NAMHOC"
PRIMARY KEY ("MaHK","NamHoc")
/
-- Table KHOA
CREATE TABLE "KHOA"(
"MaKhoa" Varchar2(10 ) NOT NULL,
"TenKhoa" NVarchar2(50) NOT NULL
)
/
-- Add keys for table KHOA
ALTER TABLE "KHOA" ADD CONSTRAINT "PK_MAKHOA" PRIMARY
KEY ("MaKhoa")
/
-- Table SINHVIEN
GVHD: VÕ HOÀNG KHANG
30QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CREATE TABLE "SINHVIEN"(
"MaSV" Varchar2(12 ) NOT NULL,
"HoTen" NVarchar2(100) NOT NULL,
"GioiTinh" NVarchar2(10) NOT NULL,
"NgaySinh" Date NOT NULL,
"NoiSinh" NVarchar2(200) NOT NULL,
"ChucVu" NVarchar2(30),
"MaTo" Varchar2(10 )
)
/
-- Add keys for table SINHVIEN
ALTER TABLE "SINHVIEN" ADD CONSTRAINT "PK_MASV" PRIMARY
KEY ("MaSV")
/
-- Table LOAISV
CREATE TABLE "LOAISV"(
"MaLSV" Varchar2(10 ) NOT NULL,
"TenLSV" NVarchar2(50) NOT NULL
)
/
-- Add keys for table LOAISV
ALTER TABLE "LOAISV" ADD CONSTRAINT "PK_MALSV" PRIMARY
KEY ("MaLSV")
/
-- Table TIEUCHI
GVHD: VÕ HOÀNG KHANG
31QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CREATE TABLE "TIEUCHI"(
"MaTC" Varchar2(10 ) NOT NULL,
"MaLTC" Varchar2(10 ),
"NoiDungTC" NVarchar2(2000) NOT NULL,
"DiemToiDa" Number
)
/
-- Add keys for table TIEUCHI
ALTER TABLE "TIEUCHI" ADD CONSTRAINT "PK_MATC" PRIMARY
KEY ("MaTC")
/
-- Table LOAITIEUCHI
CREATE TABLE "LOAITIEUCHI"(
"MaLTC" Varchar2(10 ) NOT NULL,
"TenLTC" NVarchar2(2000) NOT NULL,
"DiemToiDa" Number
)
/
-- Add keys for table LOAITIEUCHI
ALTER TABLE "LOAITIEUCHI" ADD CONSTRAINT "PK_MALTC"
PRIMARY KEY ("MaLTC")
/
-- Table TO
GVHD: VÕ HOÀNG KHANG
32QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CREATE TABLE "TO"(
"MaTo" Varchar2(10 ) NOT NULL,
"TenTo" NVarchar2(30) NOT NULL,
"MaLop" Varchar2(10 ),
"SoLuong" Number
)
/
-- Add keys for table TO
ALTER TABLE "TO" ADD CONSTRAINT "PK_MATO" PRIMARY KEY
("MaTo")
/
-- Table PHIEUDANHGIA
CREATE TABLE "PHIEUDANHGIA"(
"MaPDG" Varchar2(10 ) NOT NULL,
"MaSV" Varchar2(12 ),
"MaHK" Varchar2(10 ),
"NamHoc" Varchar2(30 ),
"NgayLap" Date,
"TongDiem_SV" Number,
"TongDiem_To" Number,
"TongDiem_Lop" Number,
"XepLoai" NVarchar2(50)
)
GVHD: VÕ HOÀNG KHANG
33QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
/
-- Add keys for table PHIEUDANHGIA
ALTER TABLE "PHIEUDANHGIA" ADD CONSTRAINT "PK_MAPDG"
PRIMARY KEY ("MaPDG")
/
-- Table TAIKHOAN
CREATE TABLE "TAIKHOAN"(
"ID" Varchar2(12 ) NOT NULL,
"Password" Varchar2(50 ),
"MaQuyen" Number,
"TenQuyen" NVarchar2(100)
)
/
-- Add keys for table TAIKHOAN
ALTER TABLE "TAIKHOAN" ADD CONSTRAINT "PK_ID" PRIMARY
KEY ("ID")
/
-- Table CT_LOAISV
CREATE TABLE "CT_LOAISV"(
"MaSV" Varchar2(12 ) NOT NULL,
"MaLSV" Varchar2(10 ) NOT NULL
GVHD: VÕ HOÀNG KHANG
34QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
)
/
-- Add keys for table CT_LOAISV
ALTER TABLE "CT_LOAISV" ADD CONSTRAINT "PK_MASV_MALSV"
PRIMARY KEY ("MaSV","MaLSV")
/
-- Table KHOAHOC
CREATE TABLE "KHOAHOC"(
"MaKH" Varchar2(20 ) NOT NULL,
"HeDaoTao" NVarchar2(50) NOT NULL,
"NamBD" Number NOT NULL
)
/
-- Add keys for table KHOAHOC
ALTER TABLE "KHOAHOC" ADD CONSTRAINT "PK_MAKH"
PRIMARY KEY ("MaKH")
/
-- Table THOIHANDG
CREATE TABLE "THOIHANDG"(
"MaTH" Varchar2(10 ) NOT NULL,
"MaHK" Varchar2(10 ) NOT NULL,
"NamHoc" Varchar2(30 ) NOT NULL,
"TuNgay" Date NOT NULL,
GVHD: VÕ HOÀNG KHANG
35QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
"DenNgay" Date NOT NULL,
"Quyen" Number NOT NULL
)
/
-- Add keys for table THOIHANDG
ALTER TABLE "THOIHANDG" ADD CONSTRAINT "PK_THOIHANDG"
PRIMARY KEY ("MaTH","MaHK","NamHoc","Quyen")
/
3.2.2. Tạo khóa ngoại
ALTER TABLE "LOP" ADD CONSTRAINT "FK_LOP_KHOA" FOREIGN
KEY ("MaKhoa") REFERENCES "KHOA" ("MaKhoa")
/
ALTER TABLE "CT_LOAISV" ADD CONSTRAINT "FK_CTLSV_SV"
FOREIGN KEY ("MaSV") REFERENCES "SINHVIEN" ("MaSV")
/
ALTER TABLE "CT_LOAISV" ADD CONSTRAINT "FK_CTLSV_LSV"
FOREIGN KEY ("MaLSV") REFERENCES "LOAISV" ("MaLSV")
/
ALTER TABLE "PHIEUDANHGIA" ADD CONSTRAINT "FK_PDG_SV"
FOREIGN KEY ("MaSV") REFERENCES "SINHVIEN" ("MaSV")
/
ALTER TABLE "PHIEUDANHGIA" ADD CONSTRAINT "FK_PDG_HK"
FOREIGN KEY ("MaHK", "NamHoc") REFERENCES "HOCKI" ("MaHK",
"NamHoc")
/
GVHD: VÕ HOÀNG KHANG
36QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
ALTER TABLE "CTDG" ADD CONSTRAINT "FK_CTDG_PDG"
FOREIGN KEY ("MaPDG") REFERENCES "PHIEUDANHGIA" ("MaPDG")
/
ALTER TABLE "CTDG" ADD CONSTRAINT "FK_CTDG_TC" FOREIGN
KEY ("MaTC") REFERENCES "TIEUCHI" ("MaTC")
/
ALTER TABLE "TIEUCHI" ADD CONSTRAINT "FK_TC_LTC" FOREIGN
KEY ("MaLTC") REFERENCES "LOAITIEUCHI" ("MaLTC")
/
ALTER TABLE "LOP" ADD CONSTRAINT "FK_LOP_KHOAHOC"
FOREIGN KEY ("MaKH") REFERENCES "KHOAHOC" ("MaKH")
/
ALTER TABLE "TO" ADD CONSTRAINT "FK_TO_LOP" FOREIGN KEY
("MaLop") REFERENCES "LOP" ("MaLop")
/
ALTER TABLE "SINHVIEN" ADD CONSTRAINT "FK_SV_TO" FOREIGN
KEY ("MaTo") REFERENCES "TO" ("MaTo")
/
ALTER TABLE "THOIHANDG" ADD CONSTRAINT
"FK_THOIHANDG_HK" FOREIGN KEY ("MaHK", "NamHoc")
REFERENCES "HOCKI" ("MaHK", "NamHoc")
/
3.2.3. Các ràng buộc toàn vẹn
o Sĩ số của lớp và số lượng sinh viên của tổ phải lớn hơn 0
--Sĩ số lớp >0
ALTER TABLE LOP ADD CONSTRAINT CK_SISO CHECK ("SiSo">0)
ENABLE;
GVHD: VÕ HOÀNG KHANG
37QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
--Số lượng sinh viên của tổ >0
ALTER TABLE "TO" ADD CONSTRAINT CK_SOLUONG CHECK ("SoLuong">0)
ENABLE;
o Giới tính là “Nam” hoặc “Nữ”
ALTER TABLE SINHVIEN ADD CONSTRAINT CK_GIOITINH CHECK
(REGEXP_LIKE("GioiTinh",'Nam') OR REGEXP_LIKE("GioiTinh",'Nữ'))
ENABLE;
o Ngày sinh phải nhỏ hơn ngày hiện tại
CREATE OR REPLACE TRIGGER CK_NGAYSINH
AFTER INSERT OR UPDATE OF "NgaySinh" ON SINHVIEN
FOR EACH ROW
WHEN (NEW."NgaySinh" > SYSDATE)
BEGIN
RAISE_APPLICATION_ERROR (-20001, 'LOI! NHAP LAI, NGAY PHAI NHO HON
< ' || SYSDATE);
ROLLBACK;
END;
o Điểm tối đa của tiêu chí và loại tiêu chí phải lớn hơn 0
--Điểm tối đa của loại tiêu chí >0
ALTER TABLE LOAITIEUCHI ADD CONSTRAINT CK_DIEMTD CHECK
("DiemToiDa">0) ENABLE;
--Điểm tối đa của loại tiêu chí >0
ALTER TABLE TIEUCHI ADD CONSTRAINT CK_DIEMTD_TC CHECK
("DiemToiDa">0) ENABLE;
o Học kì nào đang chấm điểm rèn luyện thì tình trạng của học kì đó là “Đang
chấm”
ALTER TABLE HOCKI
ADD CONSTRAINT CK_TINHTRANG CHECK
( REGEXP_LIKE("TinhTrang",'Đang chấm') OR REGEXP_LIKE("TinhTrang",'NULL'))
ENABLE;
GVHD: VÕ HOÀNG KHANG
38QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
SELECT 'PDG' || lpad(SEQ_TuTangMaPDG.nextval,5, '0') INTO :NEW."MaPDG"
FROM DUAL;
END;
end if;
end loop;
close TG_TG;
end;
DECLARE l_exists Number;
BEGIN
SELECT COUNT(*) INTO l_exists
FROM "TO" T,SinhVien SV
WHERE T."MaTo"=SV."MaTo" AND "ChucVu"='Lớp trưởng'
3.3. Thực thi các chức năng cơ bản
3.3.1. Tạo các View
1. Hiển thị danh sách lớp trưởng của toàn trường gồm các thông tin:
mã sinh viên, họ tên, lớp, khoa và sắp xếp tên lớp theo chữ cái tăng
dần
CREATE VIEW V_DS_LopTruong
AS
SELECT "MaSV","HoTen",L."MaLop","TenKhoa"
FROM Sinhvien SV,"TO" T,Lop L,Khoa K
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
AND T."MaTo"=SV."MaTo" AND "ChucVu"='Lớp trưởng'
ORDER BY L."MaLop" ASC
2. Hiển thị thông tin những sinh viên chưa thực hiện đánh giá rèn
luyện trong học kì 2 năm học “2013 – 2014”
CREATE VIEW V_SV_ChuaDGRL
AS
SELECT "MaSV","HoTen","GioiTinh","MaLop"
GVHD: VÕ HOÀNG KHANG
39QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
FROM "TO" T,Sinhvien SV
WHERE T."MaTo"=SV."MaTo" AND "MaSV" NOT IN
(
SELECT "MaSV" FROM Phieudanhgia
WHERE "MaHK"='HK2' AND "NamHoc"='2013 - 2014'
)
3. Hiển thị thông tin những sinh viên là “Đảng viên”
CREATE VIEW V_DS_DangVien
AS
SELECT SV."MaSV","HoTen","GioiTinh","MaLop"
FROM "TO" T,Sinhvien SV,Ct_loaisv CTL,LoaiSV LSV
WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=CTL."MaSV"
AND CTL."MaLSV"=LSV."MaLSV" AND "TenLSV"='Đảng viên'
4. Cho biết số lượng sinh viên của tất cả các khoa
CREATE VIEW V_SLSV_Khoa
AS
SELECT "TenKhoa",COUNT("MaSV") "Số lượng SV"
FROM Khoa K,Lop L,"TO" T,Sinhvien SV
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
AND T."MaTo"=SV."MaTo"
GROUP BY K."MaKhoa","TenKhoa"
5. Hiển thị kết quả đánh giá rèn luyện của khoa Công nghệ thông tin
trong học kì 2 năm học “2013 – 2014” gồm các thông tin: mã sinh
viên, họ tên, giới tính, chức vụ, lớp, tổng điểm, xếp loại và sắp xếp
theo tên lớp tăng dần
CREATE VIEW V_KQRL_CNTT
AS
SELECT SV."MaSV","HoTen","GioiTinh","ChucVu",L."MaLop","TongDiem_Lop" "Tổng
điểm","XepLoai"
FROM Khoa K,Lop L,"TO" T,Sinhvien SV, Phieudanhgia P
GVHD: VÕ HOÀNG KHANG
40QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
AND T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"
AND K."TenKhoa"='Công Nghệ Thông Tin'
AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014'
ORDER BY L."MaLop" ASC
6. Lấy ra danh sách sinh viên toàn trường xếp loại rèn luyện “Xuất
sắc” sắp xếp điểm giảm dần trong học kì 2 năm học 2013 – 2014 gồm
những thông tin: mã sinh viên, họ tên, giới tính, chức vụ, lớp, tổng
điểm
CREATE VIEW V_DS_XuatSac
AS
SELECT SV."MaSV","HoTen","GioiTinh","ChucVu","MaLop","TongDiem_Lop" "Tổng
điểm"
FROM "TO" T,Sinhvien SV, Phieudanhgia P
WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"
AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014' AND "XepLoai"='Xuất sắc'
ORDER BY "TongDiem_Lop" DESC
7. Cho biết thời hạn đánh giá rèn luyện của sinh viên, tổ, lớp, khoa,
trường trong học kì 2 năm học “2013 – 2014”
CREATE VIEW V_ThoiHanDG
AS
SELECT (CASE WHEN "Quyen"=0 THEN 'Sinh viên'
WHEN "Quyen"=1 THEN 'Tổ trưởng' WHEN "Quyen"=2
THEN 'Lớp trưởng' WHEN "Quyen"=3 THEN 'Khoa'
ELSE 'Trường' END) AS "Cấp bậc",
"TuNgay" "Ngày bắt đầu","DenNgay" "Ngày hết hạn"
FROM Thoihandg
WHERE "MaHK"='HK2' AND "NamHoc"='2013 - 2014'
8. Cho biết điểm rèn luyện tất các học kì của sinh viên có mã số
“1051020186”
GVHD: VÕ HOÀNG KHANG
41QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CREATE VIEW V_KQRL_TatCaHK
AS
SELECT "MaHK"||'/ '||"NamHoc" "Học kì","TongDiem_Lop" "Tổng điểm","XepLoai"
FROM Phieudanhgia
WHERE "MaSV"='1051020186'
ORDER BY "Học kì" ASC
9. Hiển thị thông tin kết quả đánh giá của học kì 2 năm học “2013 –
2014” của sinh viên có mã sinh viên “1051020186” tất cả các cột
điểm do cá nhân, tổ, lớp chấm và xếp loại
CREATE VIEW V_KQDG_SV
AS
SELECT SV."MaSV" "Mã SV","HoTen" "Họ tên",
"TongDiem_SV" "Điểm tự chấm","TongDiem_To" "Điểm tổ chấm",
"TongDiem_Lop" "Điểm lớp chấm","XepLoai" "Xếp loại"
FROM Phieudanhgia P,Sinhvien SV
WHERE P."MaSV"=SV."MaSV" AND "MaHK"='HK2'
AND "NamHoc"='2013 - 2014' AND SV."MaSV"='1051020186'
10. Hiển thị danh sách những sinh viên xếp loại “Yếu”, ”Kém” trong
học kì 2 năm học “2013 – 2014”
CREATE VIEW V_SV_Yeu_Kem
AS
SELECT SV."MaSV","HoTen","GioiTinh","MaLop"
FROM Sinhvien SV,Phieudanhgia P,"TO" T
WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"
AND ("XepLoai"='Yếu' OR "XepLoai"='Kém')
AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014'
3.3.2. Tạo các Procedure
1. Lấy ra danh sách những sinh viên vừa là Đoàn viên, vừa là Hội viên
GVHD: VÕ HOÀNG KHANG
42QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CREATE OR REPLACE PROCEDURE P_DAV_HOV
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu"
FROM Sinhvien SV,CT_Loaisv CT,Loaisv L
WHERE SV."MaSV"=CT."MaSV" AND CT."MaLSV"=L."MaLSV"
AND (L."TenLSV"='Đoàn viên' OR L."TenLSV"='Hội viên')
GROUP BY SV."MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu"
HAVING COUNT(CT."MaLSV")=2
ORDER BY SV."MaSV" DESC;
begin
for s in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(s."MaSV" ||', '||s."HoTen" ||', '||s."GioiTinh" ||', '||
s."NgaySinh" ||', '||s."NoiSinh" ||', '||s."ChucVu");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_DAV_HOV
2. Lấy ra danh sách những sinh viên thuộc hệ “Đại học chính quy”
thuộc khóa X (X là tham số)
CREATE OR REPLACE PROCEDURE P_SV_DH(X NVarchar2)
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu"
FROM Sinhvien SV,"TO" T,Lop L,Khoa K,Khoahoc KH
WHERE SV."MaTo"=T."MaTo" AND T."MaLop"=L."MaLop"
AND L."MaKhoa"=K."MaKhoa" AND L."MaKH"=KH."MaKH"
AND "HeDaoTao"='Đại học chính quy' AND K."MaKhoa"=X;
begin
for s in cur_danhsach
GVHD: VÕ HOÀNG KHANG
43QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
loop
DBMS_OUTPUT.PUT_LINE(s."MaSV" ||', '||s."HoTen" ||', '||s."GioiTinh" ||', '||
s."NgaySinh" ||', '||s."NoiSinh" ||', '||s."ChucVu");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_SV_DH('CNTT');
3. Lấy ra kết quả rèn luyện tất cả các học kì của sinh viên có mã số X,
với X là tham số truyền vào
CREATE OR REPLACE PROCEDURE P_KQ_SV(X Varchar2)
AS
CURSOR cur_danhsach is
SELECT "MaHK","NamHoc","TongDiem_Lop","XepLoai"
FROM PHIEUDANHGIA
WHERE "MaSV"=X;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaHK" ||', '||sv."NamHoc" ||', '||
sv."TongDiem_Lop" ||', '||sv."XepLoai");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_KQ_SV('1051020186');
4. Lấy ra danh sách sinh viên xếp loại X của khoa Y trong học kì 1,
năm học 2013 - 2014 (X, Y là tham số)
CREATE OR REPLACE PROCEDURE P_DSXL_SV(X NVarchar2,Y Varchar2)
AS
CURSOR cur_danhsach is
GVHD: VÕ HOÀNG KHANG
44QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh",
"ChucVu","TongDiem_Lop"
FROM Khoa K,Lop L,"TO" T,Sinhvien SV,Phieudanhgia P
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
AND T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"
AND "MaHK"='HK2' AND "NamHoc"='2013 - 2014'
AND "XepLoai"=X AND K."MaKhoa"=Y;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||
sv."NgaySinh" ||', '||sv."ChucVu" ||', '||sv."TongDiem_Lop");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_DSXL_SV('Tốt','QTKD');
5. Thống kê xếp loại sinh viên của khoa X trong học kì Y, năm học Z
(X, Y, Z là tham số)
CREATE OR REPLACE PROCEDURE P_ThongKe_XL(X Varchar2,Y Varchar2,Z
Varchar2)
AS
CURSOR cur_danhsach is
SELECT XS."MaLop" "Mã lớp",XS."SL","SLXS" "Xuất sắc","TLXS",
"SLT" "Tốt","TLT","SLK" "Khá","TLK","SLTBK" "TB - Khá","TLTBK",
"SLTB" "T. Bình","TLTB","SLY" "Yếu","TLY","SLKEM" "Kém","TLKEM" FROM
------Xuất sắc
(
select "SLXS","l"."MaLop","SL",ROUND(("SLXS"/"SL")*100,2)||'%' "TLXS" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
GVHD: VÕ HOÀNG KHANG
45QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
group by L."MaLop") "l" left join
(SELECT count(*) as "SLXS","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Xuất sắc'
group by "k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "XS",
---------Tốt
(
select "SLT","l"."MaLop","SL",ROUND(("SLT"/"SL")*100,2)||'%' "TLT" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
group by L."MaLop") "l" left join
(SELECT count(*) as "SLT","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Tốt' group by
"k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "TOT",
---------Khá
(
select "SLK","l"."MaLop","SL",ROUND(("SLK"/"SL")*100,2)||'%' "TLK" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
group by L."MaLop") "l" left join
(SELECT count(*) as "SLK","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
GVHD: VÕ HOÀNG KHANG
46QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Khá' group by
"k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "KHA",
--------Trung bình khá
(
select "SLTBK","l"."MaLop","SL",ROUND(("SLTBK"/"SL")*100,2)||'%' "TLTBK" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
group by L."MaLop") "l" left join
(SELECT count(*) as "SLTBK","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Trung bình
khá' group by "k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "TBKHA",
---------Trung bình
(
select "SLTB","l"."MaLop","SL",ROUND(("SLTB"/"SL")*100,2)||'%' "TLTB" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
group by L."MaLop") "l" left join
(SELECT count(*) as "SLTB","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Trung bình'
group by "k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "TB",
--------Yếu
GVHD: VÕ HOÀNG KHANG
47QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
(
select "SLY","l"."MaLop","SL",ROUND(("SLY"/"SL")*100,2)||'%' "TLY" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
group by L."MaLop") "l" left join
(SELECT count(*) as "SLY","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Yếu' group by
"k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "YEU",
-------Kém
(
select "SLKEM","l"."MaLop","SL",ROUND(("SLKEM"/"SL")*100,2)||'%' "TLKEM" from
(Select L."MaLop",count(*)as SL from Sinhvien SV,Lop L,"TO" T
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo" and "MaKhoa"=X
group by L."MaLop") "l" left join
(SELECT count(*) as "SLKEM","MaLop"
FROM
(Select SV.*,L."MaLop",L."MaKhoa","XepLoai","MaHK","NamHoc"
from Lop L,"TO" T,Sinhvien SV left join PHIEUDANHGIA P on SV."MaSV"=P."MaSV"
where L."MaLop"=T."MaLop" AND T."MaTo"=SV."MaTo") "k"
WHERE "MaKhoa"=X and "MaHK"=Y AND "NamHoc"=Z and "XepLoai"='Kém' group by
"k"."MaLop") "m"
on "l"."MaLop"="m"."MaLop") "KEM"
---------
WHERE "XS"."MaLop"="TOT"."MaLop" and "TOT"."MaLop"="KHA"."MaLop" and
"KHA"."MaLop"="TBKHA"."MaLop"
and "TBKHA"."MaLop"="TB"."MaLop" and "TB"."MaLop"= "YEU"."MaLop" and
"YEU"."MaLop"="KEM"."MaLop";
begin
for tk in cur_danhsach
GVHD: VÕ HOÀNG KHANG
48QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
loop
DBMS_OUTPUT.PUT_LINE(tk."Mã lớp" ||', '||tk."SL" ||', '||tk."Xuất sắc" ||', '||
tk."TLXS" ||', '||tk."Tốt" ||', '||tk."TLT" ||', '||tk."Khá" ||', '||tk."TLK" ||', '||tk."TB - Khá" ||', '||
tk."TLTBK" ||', '||
tk."T. Bình" ||', '||tk."TLTB" ||', '||tk."Yếu" ||', '||tk."TLY" ||', '||tk."Kém" ||', '||tk."TLKEM");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_ThongKe_XL('CNTT','HK2','2013 - 2014');
6. Lấy ra danh sách sinh viên chưa đánh giá rèn luyện của khoa X
trong học kì Y, năm học Z (X, Y, Z là tham số)
CREATE OR REPLACE PROCEDURE P_SV_ChuaDG(X Varchar2,Y Varchar2,Z
Varchar2)
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","ChucVu"
FROM Khoa K,Lop L,"TO" T,Sinhvien SV
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
AND T."MaTo"=SV."MaTo" AND SV."MaSV" NOT IN
(SELECT "MaSV" FROM Phieudanhgia P,HocKi HK
WHERE P."MaHK"=HK."MaHK" AND P."NamHoc"=HK."NamHoc"
AND HK."MaHK"=Y AND HK."NamHoc"=Z)
AND K."MaKhoa"=X;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||
sv."NgaySinh" ||', '||sv."ChucVu");
end loop;
end;
--Thực thi:
GVHD: VÕ HOÀNG KHANG
49QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
set serveroutput on;
execute P_SV_ChuaDG('CNTT','HK1','2013 - 2014')
7. Lấy ra danh sách sinh viên có loại sinh viên là X
CREATE OR REPLACE PROCEDURE P_Loai_SV(X NVarchar2)
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen","GioiTinh","NgaySinh","ChucVu"
FROM Sinhvien SV,Ct_loaisv CT,Loaisv L
WHERE L."MaLSV"=CT."MaLSV" AND CT."MaSV"=SV."MaSV"
AND L."TenLSV"=X;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||
sv."NgaySinh" ||', '||sv."ChucVu");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_Loai_SV('Đoàn viên')
8. Lấy ra danh sách lớp trưởng của khoa X
CREATE OR REPLACE PROCEDURE P_DS_LopTruong(X Varchar2)
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen",L."MaLop"
FROM Khoa K,Lop L,"TO" T,Sinhvien SV
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
GVHD: VÕ HOÀNG KHANG
50QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
AND T."MaTo"=SV."MaTo"
AND SV."ChucVu"='Lớp trưởng' AND K."MaKhoa"=X;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."MaLop");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_DS_LopTruong('QTKD')
9. Lấy ra danh sách 10 sinh viên có điểm rèn luyện cao nhất của khoa
X trong học kì Y năm học Z
CREATE OR REPLACE PROCEDURE P_DS_10SV_DiemMax(X Varchar2,Y Varchar2,Z
Varchar2)
AS
CURSOR cur_danhsach is
SELECT * FROM
(
SELECT SV."MaSV","HoTen","GioiTinh",L."MaLop","TongDiem_Lop"
FROM Khoa K,Lop L,"TO" T,Sinhvien SV,Phieudanhgia P
WHERE K."MaKhoa"=L."MaKhoa" AND L."MaLop"=T."MaLop"
AND T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"
AND K."MaKhoa"=X AND "MaHK"=Y AND "NamHoc"=Z
ORDER BY "TongDiem_Lop" DESC
)
WHERE ROWNUM<=10;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||
sv."MaLop" ||', '||sv."TongDiem_Lop");
GVHD: VÕ HOÀNG KHANG
51QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_DS_10SV_DiemMax('CNTT','HK2','2013 - 2014')
10. Tạo thủ tục cập nhật tổng điểm do sinh viên tự chấm
CREATE OR REPLACE PROCEDURE P_CapNhat_TongDiemSV(PDG Varchar2,TC
Varchar2,DIEM Number,NX Nvarchar2)
AS
begin
insert into
Ctdg_sv("MaPDG","MaTC","Diem_SV","NhanXet_SV")VALUES(PDG,TC,DIEM,NX);
update Phieudanhgia set "TongDiem_SV"=(select sum("Diem_SV") from Ctdg_sv
where "MaPDG"=PDG) WHERE "MaPDG"=PDG;
end P_CapNhat_TongDiemSV;
--Thực thi:
set serveroutput on;
execute P_CapNhat_TongDiemSV('PDG00016','TC1a','10','');
execute P_CapNhat_TongDiemSV('PDG00016','TC3c','15','');
execute P_CapNhat_TongDiemSV('PDG00016','TC4d','20','');
11. Tạo thủ tục cập nhật tổng điểm do tổ chấm
CREATE OR REPLACE PROCEDURE P_CapNhat_TongDiemTo(PDG Varchar2,TC
Varchar2,DIEM Number,NX Nvarchar2)
AS
begin
insert into
Ctdg_to("MaPDG","MaTC","Diem_To","NhanXet_To")VALUES(PDG,TC,DIEM,NX);
update Phieudanhgia set "TongDiem_To"=(select sum("Diem_To") from Ctdg_to where
"MaPDG"=PDG) WHERE "MaPDG"=PDG;
GVHD: VÕ HOÀNG KHANG
52QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
end P_CapNhat_TongDiemTo;
--Thực thi:
set serveroutput on;
execute P_CapNhat_TongDiemTo('PDG00016','TC1d','20','');
execute P_CapNhat_TongDiemTo('PDG00016','TC2c','18','');
execute P_CapNhat_TongDiemTo('PDG00016','TC3a','15','');
execute P_CapNhat_TongDiemTo('PDG00016','TC4a','10','');
12. Tạo thủ tục cập nhật tổng điểm lớp chấm và xếp loại cho sinh viên
được qui định: Nếu tổng điểm lớp chấm
o >=9 và <10 thì xếp loại “Xuất sắc”
o >=8 và <9 thì xếp loại “Tốt”
o >=7 và <8 thì xếp loại “Khá”
o >=6 và <7 thì xếp loại “Trung bình khá”
o >=5 và <6 thì xếp loại “Trung bình”
o >=3 và <5 thì xếp loại “Yếu”
o <3 thì xếp loại “Kém”
CREATE OR REPLACE PROCEDURE P_CapNhat_TongDiemXLLop
(PDG Varchar2,TC Varchar2,NX Nvarchar2,DIEM Number)
AS
begin
insert into
Ctdg_lop("MaPDG","MaTC","Diem_Lop","NhanXet_Lop")VALUES(PDG,TC,DIEM,NX);
update Phieudanhgia set "TongDiem_Lop"=(select sum("Diem_Lop") from Ctdg_lop
where "MaPDG"=PDG) WHERE "MaPDG"=PDG;
update Phieudanhgia set "XepLoai"='Xuất sắc' where "TongDiem_Lop">=90 and
"TongDiem_Lop"<=100 and "MaPDG"=PDG;
update Phieudanhgia set "XepLoai"='Tốt' where "TongDiem_Lop">=80 and
"TongDiem_Lop"<=89 and "MaPDG"=PDG;
update Phieudanhgia set "XepLoai"='Khá' where "TongDiem_Lop">=70 and
"TongDiem_Lop"<=79 and "MaPDG"=PDG;
GVHD: VÕ HOÀNG KHANG
53QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
update Phieudanhgia set "XepLoai"='Trung bình khá' where "TongDiem_Lop">=60 and
"TongDiem_Lop"<=69 and "MaPDG"=PDG;
update Phieudanhgia set "XepLoai"='Trung bình' where "TongDiem_Lop">=50 and
"TongDiem_Lop"<=59 and "MaPDG"=PDG;
update Phieudanhgia set "XepLoai"='Yếu' where "TongDiem_Lop">=30 and
"TongDiem_Lop"<=49 and "MaPDG"=PDG;
update Phieudanhgia set "XepLoai"='Kém' where "TongDiem_Lop">=0 and
"TongDiem_Lop"<=29 or "TongDiem_Lop" is NULL and "MaPDG"=PDG;
end P_CapNhat_TongDiemXLLop;
--Thực thi:
set serveroutput on;
execute P_CapNhat_TongDiemXLLop('PDG00016','TC1a','','5');
execute P_CapNhat_TongDiemXLLop('PDG00016','TC4d','','20');
13. Tạo thủ tục thêm một sinh viên mới với tất cả các giá trị là tham số
truyền vào. Đồng thời sẽ tạo ra 1 tài khoản cho sinh viên khi thêm
sinh viên đó, lấy mật khẩu là ngày sinh theo định dạng dd/mm/yy
CREATE OR REPLACE PROCEDURE P_Them_SV(MaSV Varchar2,HoTen Nvarchar2,
GioiTinh Nvarchar2,NgaySinh Date,NoiSinh Nvarchar2,ChucVu Nvarchar2,MaTo Varchar2)
AS
BEGIN
INSERT INTO
Sinhvien("MaSV","HoTen","GioiTinh","NgaySinh","NoiSinh","ChucVu","MaTo")
VALUES (MaSV,HoTen,GioiTinh,NgaySinh,NoiSinh,ChucVu,MaTo);
INSERT INTO Taikhoan("ID","Password","MaQuyen","TenQuyen")
VALUES(MaSV,TO_CHAR(NgaySinh,'DD')||TO_CHAR(NgaySinh,'MM')||
TO_CHAR(NgaySinh,'YY'),
(SELECT (CASE WHEN "ChucVu" IS NULL THEN 0 WHEN "ChucVu"='Tổ trưởng'
THEN 1 ELSE 2 END)"CV"
FROM Sinhvien WHERE "MaSV"=MaSV),ChucVu);
END P_Them_SV;
--Thực thi:
set serveroutput on;
GVHD: VÕ HOÀNG KHANG
54QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
execute P_Them_SV('1451020192','Nguyễn T Thanh Bình','Nữ','15/6/1995','Cà Mau','Tổ
trưởng','T410DTHC');
14. Tạo thủ tục sửa thông tin sinh viên với tất cả các giá trị là tham số
truyền vào
CREATE OR REPLACE PROCEDURE P_CapNhat_SV(MaSV Varchar2,HoTen Nvarchar2,
GioiTinh Nvarchar2,NgaySinh Date,NoiSinh Nvarchar2,ChucVu Nvarchar2,MaTo Varchar2)
AS
BEGIN
UPDATE Sinhvien
SET "HoTen"=HoTen,"GioiTinh"=GioiTinh,"NgaySinh"=NgaySinh,
"NoiSinh"=NoiSinh,"ChucVu"=ChucVu,"MaTo"=MaTo
WHERE
"MaSV"=MaSV;
END P_CapNhat_SV;
--Thực thi:
set serveroutput on;
execute P_CapNhat_SV('1451020186','Lê Nhật Tấn','Nam','15/6/1994','An Giang','Tổ
trưởng','T210DTHH');
15. Tạo thủ tục xóa một sinh viên với mã sinh viên là tham số truyền vào
CREATE OR REPLACE PROCEDURE P_Xoa_SV(MaSV VARCHAR2)
AS
BEGIN
DELETE FROM Sinhvien WHERE "MaSV" = MaSV;
END P_Xoa_SV;
--Thực thi:
GVHD: VÕ HOÀNG KHANG
55QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
set serveroutput on;
execute P_Xoa_SV('1451020186');
16. Liệt những sinh viên có từ X phiếu đánh giá trở lên
CREATE OR REPLACE PROCEDURE P_DS_TuXPDG(X Number)
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen","GioiTinh",T."MaLop"
FROM Sinhvien SV,"TO" T,Phieudanhgia P
WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV"
GROUP BY SV."MaSV","HoTen","GioiTinh",T."MaLop"
HAVING COUNT("MaPDG")>=X;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||
sv."MaLop");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_DS_TuXPDG(2);
17. Tạo thủ tục liệt kê chi tiết điểm đánh giá của sinh viên theo loại tiêu
chí với mã sinh viên, học kì và năm học là tham số
CREATE OR REPLACE PROCEDURE P_CT_DiemDG(X Varchar2,Y Varchar2,Z
Varchar2)
AS
CURSOR cur_danhsach is
SELECT "TenLTC" "Loại tiêu chí",SUM("Diem_Lop") "Điểm"
FROM Phieudanhgia P,Ctdg_lop CT,Tieuchi TC,Loaitieuchi LTC
WHERE P."MaPDG"=CT."MaPDG" AND CT."MaTC"=TC."MaTC"
AND TC."MaLTC"=LTC."MaLTC" AND "MaSV"=X
GVHD: VÕ HOÀNG KHANG
56QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
AND "MaHK"=Y AND "NamHoc"=Z
GROUP BY LTC."MaLTC","TenLTC";
begin
for ltc in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(ltc."Loại tiêu chí" ||', '||ltc."Điểm");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_CT_DiemDG('1051020186','HK2','2013 - 2014');
18. Lấy ra danh sách những sinh viên có hơn X phiếu đánh giá có điểm
rèn luyện không đạt
CREATE OR REPLACE PROCEDURE P_DS_KhongDat(X Number)
AS
CURSOR cur_danhsach is
SELECT SV."MaSV","HoTen","GioiTinh","MaLop","TongDiem_Lop" "Tổng điểm"
FROM "TO" T,Sinhvien SV,Phieudanhgia P
WHERE T."MaTo"=SV."MaTo" AND SV."MaSV"=P."MaSV" AND
"TongDiem_Lop"<50
GROUP BY SV."MaSV","HoTen","GioiTinh","MaLop","TongDiem_Lop"
HAVING COUNT("MaPDG")>=X;
begin
for sv in cur_danhsach
loop
DBMS_OUTPUT.PUT_LINE(sv."MaSV" ||', '||sv."HoTen" ||', '||sv."GioiTinh" ||', '||
sv."MaLop" ||', '||sv."Tổng điểm");
end loop;
end;
--Thực thi:
set serveroutput on;
execute P_DS_KhongDat(1);
GVHD: VÕ HOÀNG KHANG
57QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
3.3.3. Tạo các Function
1. Viết hàm tính điểm trung bình tất cả các học kì của sinh viên, với mã
sinh viên là tham số truyền vào
CREATE OR REPLACE FUNCTION AVG_RL(
ma SINHVIEN."MaSV"%TYPE)
RETURN NUMBER
AS
diemtb NUMBER;
BEGIN
SELECT AVG(PHIEUDANHGIA."TongDiem_Lop")
INTO diemtb
FROM PHIEUDANHGIA
WHERE PHIEUDANHGIA."MaSV"=ma;
RETURN diemtb;
EXCEPTION
WHEN no_data_found THEN
RETURN('du lieu khong tim thay');
WHEN OTHERS THEN
RETURN('LOI HAM');
END;
----THỰC THI
set serveroutput on
set verify off
GVHD: VÕ HOÀNG KHANG
58QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
declare DIEMTB number;
begin
DIEMTB:=AVG_RL('0951020012');
dbms_output.put_line(DIEMTB);
end;
2. Viết hàm cho biết kết quả rèn luyện của sinh viên, với mã sinh viên,
mã học kì, năm học là tham số truyền vào
create or replace FUNCTION KQ_RL
(ma_sv PHIEUDANHGIA."MaSV"%type, ma_hk PHIEUDANHGIA."MaHK"%type,
nam_hoc PHIEUDANHGIA."NamHoc"%type)
return nvarchar2
as
xep_loai nvarchar2 (50);
BEGIN
select PHIEUDANHGIA."XepLoai" into xep_loai FROM PHIEUDANHGIA WHERE
PHIEUDANHGIA."MaSV"= ma_sv and PHIEUDANHGIA."MaHK"=ma_hk and
PHIEUDANHGIA."NamHoc"=nam_hoc;
return xep_loai;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--Thực thi:
set serveroutput on
set verify off
begin
dbms_output.put_line(KQ_RL('0951020012','HK1','2013 - 2014'));
end;
GVHD: VÕ HOÀNG KHANG
59QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
3. Viết hàm cho biết điểm tối đa của 1 loại tiêu chí với mã loại tiêu chí
là tham số nhập vào
create or replace FUNCTION DIEM_LTC(ma_ltc LOAITIEUCHI."MaLTC"%type)
return number
as
diem number;
BEGIN
select LOAITIEUCHI."DiemToiDa" into diem FROM LOAITIEUCHI WHERE
LOAITIEUCHI."MaLTC"= ma_ltc ;
return diem;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--THỰC THI:
set serveroutput on
set verify off
begin
dbms_output.put_line(DIEM_LTC('LTC01'));
end;
4. Viết hàm tính số phiếu đánh giá của sinh viên, với mã sinh viên là
tham số (Nếu sinh viên này không tồn tại trong phiếu đánh giá thì trả
về 0)
create or replace FUNCTION TINH_PDG
(ma_sv PHIEUDANHGIA."MaSV"%type)
return number
as
soluong number;
BEGIN
select count ("MaPDG") into soluong FROM PHIEUDANHGIA WHERE
PHIEUDANHGIA."MaSV"= ma_sv ;
return soluong;
GVHD: VÕ HOÀNG KHANG
60QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
-- THỰC THI:
set serveroutput on
set verify off
begin
dbms_output.put_line(TINH_PDG('0951020012'));
end;
5. Viết hàm cho biết thời hạn đánh giá của cấp bậc X (quyền) trong học
kì Y năm học Z
create or replace FUNCTION THOIHAN_DG
(maquyen THOIHANDG."Quyen"%TYPE, ma_hk THOIHANDG."MaHK"%type,
nam_hoc THOIHANDG."NamHoc"%type)
return
nvarchar2
as
thoihan nvarchar2 (50);
thoihan1 nvarchar2 (50);
thoihan2 nvarchar2 (50);
begin
SELECT THOIHANDG."TuNgay" , THOIHANDG."DenNgay" into thoihan1,thoihan2
from THOIHANDG WHERE THOIHANDG."MaHK"= ma_hk and
THOIHANDG."Quyen"=maquyen and THOIHANDG."NamHoc"=nam_hoc;
thoihan:=(thoihan1||'-->'||thoihan2);
return thoihan;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--THỰC THI:
GVHD: VÕ HOÀNG KHANG
61QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
set serveroutput on
set verify off
begin
dbms_output.put_line(THOIHAN_DG('1','HK2','2013 - 2014'));
end;
6. Viết hàm đếm số lượng kết quả rèn luyện không đạt của khoa X,
trong học kì Y, năm học Z
create or replace FUNCTION TINH_khongdat
(ma_khoa KHOA."MaKhoa"%type, ma_hk PHIEUDANHGIA."MaHK"%type,
nam_hoc PHIEUDANHGIA."NamHoc"%type)
return number
as
soluong number;
BEGIN
select count (PHIEUDANHGIA."MaPDG")into soluong FROM
PHIEUDANHGIA,SINHVIEN,"TO",LOP,KHOA WHERE
PHIEUDANHGIA."MaHK"=ma_hk and PHIEUDANHGIA."NamHoc"=nam_hoc and
KHOA."MaKhoa"=ma_khoa and
KHOA."MaKhoa"=LOP."MaKhoa" and LOP."MaLop"="TO"."MaLop" and
"TO"."MaTo"=SINHVIEN."MaTo" and
SINHVIEN."MaSV"=PHIEUDANHGIA."MaSV" and
PHIEUDANHGIA."TongDiem_Lop"<=50;
return soluong;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--THỰC THI:
GVHD: VÕ HOÀNG KHANG
62QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
set serveroutput on
set verify off
begin
dbms_output.put_line(TINH_KHONGDAT('CNTT','HK1','2013 - 2014'));
end;
7. Viết hàm cho biết lớp X còn bao nhiêu sinh viên chưa đánh giá rèn
luyện trong học kì Y năm học Z
create or replace FUNCTION TINH_CHUADG
(ma_lop LOP."MaLop"%type, ma_hk PHIEUDANHGIA."MaHK"%type,
nam_hoc PHIEUDANHGIA."NamHoc"%type)
return number
as
soluong number;
BEGIN
select count (SINHVIEN."MaSV")into soluong FROM SINHVIEN,"TO",LOP WHERE
"TO"."MaTo" = SINHVIEN."MaTo"AND "TO"."MaLop" = LOP."MaLop"AND
LOP."MaLop"=ma_lop
AND SINHVIEN."MaSV" NOT IN (SELECT SINHVIEN."MaSV" FROM SINHVIEN,
PHIEUDANHGIA WHERE
SINHVIEN."MaSV"=PHIEUDANHGIA."MaSV" AND PHIEUDANHGIA."MaHK"=ma_hk
and PHIEUDANHGIA."NamHoc"=nam_hoc);
return soluong;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--THỰC THI
set serveroutput on
set verify off
GVHD: VÕ HOÀNG KHANG
63QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
begin
dbms_output.put_line(TINH_CHUADG('10DTHH','HK1','2013 - 2014'));
end;
8. Tạo hàm cho biết ngày lập của phiếu đánh giá X
create or replace FUNCTION TIM_NL
(MA PHIEUDANHGIA."MaPDG"%TYPE)
return nvarchar2
as
ngay_lap nvarchar2 (50);
BEGIN
SELECT "NgayLap" into ngay_lap FROM PHIEUDANHGIA WHERE
PHIEUDANHGIA."MaPDG"=MA;
return ngay_lap;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--THỰC THI:
set serveroutput on
set verify off
begin
dbms_output.put_line(TIM_NL('PH01’));
end;
9. Cho biết số phiếu đánh giá được lập ra trong ngày X (nếu không có
thì trả về giá trị “0”)
create or replace FUNCTION TINHSOPHIEU_NL
GVHD: VÕ HOÀNG KHANG
64QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
(NGAY PHIEUDANHGIA."NgayLap"%TYPE)
return number
as
soluong number;
BEGIN
SELECT count("MaPDG") into soluong FROM PHIEUDANHGIA WHERE
TRUNC(PHIEUDANHGIA."NgayLap")=NGAY;
return soluong;
EXCEPTION
WHEN no_data_found then return('du lieu khong tim thay');
WHEN OTHERS THEN RETURN('LOI HAM');
END;
--THỰC THI:
set serveroutput on
set verify off
begin
dbms_output.put_line(TINHSOPHIEU_NL('21/06/2014’);
end;
3.3.4. Tạo các Trigger
1. Năm bắt đầu khóa học nhỏ hơn năm kết thúc khóa học
create or replace TRIGGER TR_namkt
BEFORE INSERT OR UPDATE ON LOP
FOR EACH ROW
DECLARE
ngay LOP."NamKT"%TYPE;
ngay1 KHOAHOC."NamBD"%TYPE;
BEGIN
if
:NEW."NamKT" IS NOT NULL THEN
ngay:=:NEW."NamKT";
GVHD: VÕ HOÀNG KHANG
65QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
SELECT KHOAHOC."NamBD" INTO ngay1 FROM KHOAHOC WHERE
KHOAHOC."MaKH"=:NEW."MaKH";
if(ngay1>ngay)then
raise_application_error(-20020,'nam bat dau khong duoc lon hon nam kt');
ROLLBACK;
end if;
end if;
end;
2. Số lượng sinh viên của tổ không được lớn hơn sĩ số lớp
create or replace TRIGGER TR_TO
BEFORE INSERT OR UPDATE ON "TO"
FOR EACH ROW
DECLARE
sl "TO"."SoLuong"%TYPE;
ss LOP."SiSo"%TYPE;
BEGIN
if
:NEW."SoLuong" IS NOT NULL THEN
sl:=:NEW."SoLuong";
SELECT lOP."SiSo" INTO ss FROM LOP WHERE LOP."MaLop"=:NEW."MaLop";
if(sl>=ss)then
raise_application_error(-20020,'Số lượng sinh viên tổ không được lớn hơn hoặc bằng sĩ số
của lớp');
ROLLBACK;
end if;
end if;
end;
3. Sĩ số của lớp lớn hơn 0
create or replace TRIGGER TR_SISOKHACKHONG
AFTER INSERT OR UPDATE OF "SiSo" ON LOP
GVHD: VÕ HOÀNG KHANG
66QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
FOR EACH ROW
WHEN(NEW."SiSo"<=0)
begin
raise_application_error(-20020,'si so khong hop le,si so phai lon hon 0');
ROLLBACK;
end;
4. Số lượng sinh viên của tổ phải lớn hơn 0
create or replace TRIGGER TR_SoluongKHAC0
AFTER INSERT OR UPDATE OF "SoLuong" ON "TO"
FOR EACH ROW
WHEN(NEW."SoLuong"<=0)
begin
raise_application_error(-20020,'so luong khong hop le,so luong phai lon hon 0');
ROLLBACK;
end;
5. Giới tính là “Nam” hoặc “Nữ”
create or replace TRIGGER TR_Gioi
BEFORE INSERT OR UPDATE OF "GioiTinh" ON SINHVIEN
FOR EACH ROw
BEGIN
if :NEW."GioiTinh"!= 'Nam' and :NEW."GioiTinh"!='Nữ'
then raise_application_error(-20020,'Giới Tính chỉ được nhập 2 giá trị là Nam hoặc Nữ');
end if;
end;
6. Ngày sinh phải nhỏ hơn ngày hiện tại
create or replace TRIGGER TR_ngaysinh
AFTER INSERT OR UPDATE OF "NgaySinh" ON SINHVIEN
GVHD: VÕ HOÀNG KHANG
67QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
FOR EACH ROW
WHEN(NEW."NgaySinh">sysdate )
begin
raise_application_error(-20020,'Ngay sinh phai nho hon ngay hien tai'||sysdate);
ROLLBACK;
end;
7. Điểm tối đa của tiêu chí không lớn hơn điểm tối đa của loại tiêu chí
create or replace TRIGGER TR_tieuchi
BEFORE INSERT OR UPDATE ON TIEUCHI
FOR EACH ROW
DECLARE
tc TIEUCHI."DiemToiDa"%TYPE;
ltc LOAITIEUCHI."DiemToiDa"%TYPE;
BEGIN
if
:NEW."DiemToiDa" IS NOT NULL THEN
tc:=:NEW."DiemToiDa";
SELECT LOAITIEUCHI."DiemToiDa" INTO ltc FROM LOAITIEUCHI WHERE
LOAITIEUCHI."MaLTC"=:NEW."MaLTC";
if(tc>ltc)then
raise_application_error(-20020,'Điểm tối đa của tiêu chí không được lớn hơn điểm tối đa của
loại tiêu chí tương ứng');
ROLLBACK;
end if;
end if;
end;
8. Điểm tối đa của tiêu chí phải lớn hơn 0
create or replace TRIGGER TR_DiemTCkhac0
GVHD: VÕ HOÀNG KHANG
68QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
AFTER INSERT OR UPDATE OF "DiemToiDa" ON TIEUCHI
FOR EACH ROW
WHEN(NEW."DiemToiDa"<=0)
begin
raise_application_error(-20020,'Điểm tiêu chí không hợp lê, điểm phải lớn hơn 0');
ROLLBACK;
end;
9. Điểm tối đa của loại tiêu chí phải lớn hơn 0
create or replace TRIGGER TR_DiemLTCkhac0
AFTER INSERT OR UPDATE OF "DiemToiDa" ON LOAITIEUCHI
FOR EACH ROW
WHEN(NEW."DiemToiDa"<=0)
begin
raise_application_error(-20020,'Điểm loại tiêu chí không hợp lê, điểm phải lớn hơn 0');
ROLLBACK;
end;
10. Ngày lập phiếu đánh giá là ngày hiện tại
create or replace TRIGGER TR_NGAYLAP
BEFORE INSERT or UPDATE ON PHIEUDANHGIA
FOR EACH ROW
BEGIN
:NEW."NgayLap":= sysdate;
end;
11. Mỗi sinh viên chỉ có 1 phiếu đánh giá trong 1 học kì
create or replace TRIGGER TR_PDGO1
BEFORE INSERT on PHIEUDANHGIA
FOR EACH ROW
DECLARE
GVHD: VÕ HOÀNG KHANG
69QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
CURSOR TG_TG IS
SELECT PHIEUDANHGIA."MaSV",
PHIEUDANHGIA."MaHK",PHIEUDANHGIA."NamHoc" FROM PHIEUDANHGIA;
ma_sv PHIEUDANHGIA."MaSV"%type;
ma_hk PHIEUDANHGIA."MaHK"%type;
nam_hoc PHIEUDANHGIA."NamHoc"%type;
begin
OPEN TG_TG;
LOOP
FETCH TG_TG into ma_sv, ma_hk, nam_hoc;
EXIT when TG_TG%NOTFOUND;
if :NEW."MaSV"=ma_sv and :NEW."MaHK"=ma_hk and :NEW."NamHoc"=nam_hoc
then
raise_application_error(-20020,'khong hop le');
ROLLBACK;
end if;
end loop;
close TG_TG;
end;
12. Mỗi tổ chỉ có 1 tổ trưởng, mỗi lớp chỉ có 1 lớp trưởng
--Mỗi tổ chỉ có 1 tổ trưởng
CREATE OR REPLACE TRIGGER TR_ToTruong
AFTER INSERT OR UPDATE ON Sinhvien
FOR EACH ROW
DECLARE l_exists Number;
BEGIN
SELECT COUNT(*) INTO l_exists
FROM SinhVien
WHERE "ChucVu"='Tổ trưởng'
GROUP BY "MaTo"
HAVING COUNT(*)=1;
GVHD: VÕ HOÀNG KHANG
70QUẢN LÝ ĐÁNH GIÁ ĐIỂM RÈN LUYỆN SINH VIÊN
IF l_exists<>1 THEN
BEGIN
raise_application_error(-20020,'Mỗi tổ chỉ có 1 tổ trưởng');
ROLLBACK;
END;
END IF;
END;
--Mỗi lớp chỉ có 1 lớp trưởng
CREATE OR REPLACE TRIGGER TR_LopTruong
AFTER INSERT OR UPDATE ON Sinhvien
FOR EACH ROW
DECLARE l_exists Number;
BEGIN
SELECT COUNT(*) INTO l_exists
FROM "TO" T,SinhVien SV
WHERE T."MaTo"=SV."MaTo" AND "ChucVu"='Lớp trưởng'
GROUP BY "MaLop"
HAVING COUNT(*)=1;
IF l_exists<>1 THEN
BEGIN
raise_application_error(-20020,'Mỗi lớp chỉ có 1 lớp trưởng');
ROLLBACK;
END;
END IF;
END;
CHƯƠNG 4 - ỨNG DỤNG
GVHD: VÕ HOÀNG KHANG