Đang tải... (xem toàn văn)
Con trỏ lấy tên sách và tên tác giả của các sách trong thể loại ''''cong nghe-kinh te''''.. Thủ tục lấy danh sách các sách đã được mượn bởi 1 độc giả với mã độc giả được nhập từ bàn phím2.2.6.
Trang 1TRƯỜNG ĐẠI HỌC THỦY LỢIKHOA CÔNG NGHỆ THÔNG TIN
-🙞🙜🕮🙞🙜 -BÁO CÁO BÀI TẬP LỚN Môn học: Hệ quản trị cơ sở dữ liệu
Đề tài: Quản lý thư viện
Giáo viên hướng dẫn: Nguyễn Quỳnh ChâuNhóm sinh viên thực hiện: Nhóm 12
Thành viên nhóm: Nguyễn Xuân Tùng Anh - 2151173747Vũ Văn Chính - 2151173753Ngô Anh Quý - 2151173817Nguyễn Văn Mạnh - 2151173797
Hà Nội, ngày 20 tháng 01 năm 2024
Trang 2MỤC LỤC
LỜI NÓI ĐẦU 4
BẢNG PHÂN CHIA NHIỆM VỤ 5
PHẦN 1: THIẾT KẾ CƠ SỞ DỮ LIỆU 7
1.1 Cơ sở dữ liệu 7
1.1.1 Giới thiệu chung 7
1.1.2 Yêu cầu chung 7
1.1.3 Phương pháp giải quyết bài toán 7
1.2 Mô hình quan hệ (Diagram) 8
2.1.1 Con trỏ in ra thông tin của sách theo tên sách tác giả thể loại 10
2.1.2 Con trỏ xem chi tiết độc giả và tên sách đã mượn 10
2.1.3 Con trỏ hiển thị tên độc giả, số điện thoai và số lần mượn sách 12
2.1.4 Con trỏ hiển thị tên độc giả, số điện thoai và tổng số tiền cọc 13
2.1.5 Con trỏ hiển thị tên thủ thư, số điện thoại thủ thư và số lần cho mượn sách 14
2.1.6 Con trỏ hiển thị tên thủ thư, tuổi, địa chỉ và số điện thoại của thủ thư 16
2.1.7 Con trỏ lấy tên đầu tiên của tác giả 17
2.1.8 Con trỏ lấy tên sách và tên tác giả của các sách trong thể loại 'cong nghe-kinh te' .182.2 Thủ tục (Proc) 19
2.2.1 Thủ tục thêm phiếu mượn sách mới 19
2.2.2 Thủ tục xóa phiếu mượn sách và chi tiết phiếu mượn 21
2.2.3 Thủ tục tính tuổi hiện tại của một độc giả bất kỳ với tên độc giả được nhập từ bàn phím 23
2.2.4 Thủ tục hiển thị tổng số lượng sách đã mượn với tên sách được nhập từ bàn phím 24
2.2.5 Thủ tục lấy danh sách các sách đã được mượn bởi 1 độc giả với mã độc giả được nhậptừ bàn phím 25
2.2.6 Thủ tục tính tổng tiền sách 1 độc giả đã mượn với mã độc giả nhập từ bàn phím 26
2.2.7 Thủ tục lấy danh sách các độc giả có số điện thoại kết thúc bằng '1234' 27
2.2.8 Thủ tục lấy tổng số lượng sách trong bảng SACH 27
2.3 Hàm (Function) 28
2.3.1 Hàm xem tổng số lượng sách theo từng thể loại 28
2.3.2 Hàm in ra danh sách sách đã mượn của độc giả 29
2.3.3 Hàm xem tổng số lượng sách theo mã nhà xuất bản 30
Trang 32.3.4 Hàm xem chi tiết các sách theo mã nhà xuất bản 30
2.3.5 Hàm trả về thông tin cuốn sách được mượn nhiều nhất 31
2.3.6 Hàm trả về thông tin độc giả bao gồm mã độc giả, tên, ngày sinh, địa chỉ, số điện thoại đã thực hiện trả sách trong tháng 2 năm 2024 32
2.3.7 Hàm tính số lượng sách theo thể loại 32
2.3.8 Hàm tính tổng tiền cọc của độc giả 33
2.4 Khung nhìn (View) 34
2.4.1 View xem số lượng sách còn lại 34
2.4.2 View xem chi tiết thông tin phiếu mượn 35
2.4.3 View xem các sách ở tủ sách A 37
2.4.4 View với mã tác giả, tên tác giả, tên tác phẩm, thể loại mà tác giả có quê quán ở Hải Phòng 38
2.4.5 View hiển thị thông tin những độc giả dưới 25 tuổi 39
2.4.6 View hiển thị độc giả và thể loại sách đã mượn 39
2.4.7 View hiển thị sách của mỗi tác giả 40
2.4.8 View hiển thị độc giả và số cuốn sách đã mượn 41
2.5 Trigger 41
2.5.1 Trigger tự động cập nhật sách khi thêm phiếu mượn 42
2.5.2 Trigger tự động cập nhật sách khi xóa phiếu mượn 44
2.5.3 Trigger khi thêm một sách thì thông báo thêm thành công 46
2.5.4 Trigger khi sửa một độc giả thì thông báo sửa thành công 48
2.5.5 Trigger tự động xóa tác giả khi xóa mã tác giả từ bàn phím 48
2.5.6 Trigger kiểm tra thủ thư đã tồn tại chưa 50
2.5.7 Trigger cập nhật số điện thoại của tác giả 51
2.5.8 Trigger xóa tác giả 52
2.6 Phân quyền cho user 52
2.6.1 Cấp quyền cho một user (TungAnh176) 52
2.6.2 Cấp quyền cho một user (CHINH0705) 54
2.6.3 Cấp quyền cho một user (QUY0211) 55
2.6.4 Cấp quyền cho một user (MANH69) 56
2.7 Isolation level cho transanction 57
2.7.1 Read Uncommitted (Chưa cô lập đọc) 57
2.7.2 Read Committed (Đã cô lập đọc) 58
2.7.3 Repeatable Read (Lặp lại đọc) 60
2.7.4 Serializable (Khóa toàn bộ) 61
PHẦN 3: KẾT LUẬN 63
3
Trang 4LỜI NÓI ĐẦU
Có thể nói, công nghệ thông tin là một phát minh hiện đại đạt đến đỉnh cao của thế giớiloài người Những thành tựu ấy đã góp phần to lớn trong việc xây dựng, nâng cao đời sống xã hội, đưa con người đến với thời đại của công nghệ.
Đặc biệt công nghệ số phát triển mạnh mẽ, nó tác động rất lớn tới các doanh nghiệp Doanh nghiệp cần phải chủ động, thay đổi cách thức quản lý, lãnh đạo cũng như trong hoạt động sản xuất để đạt được những lợi ích tốt nhất Thời đại công nghệ số ra đời, nó cũng là một trong những thách thức lớn đối với doanh nghiệp, nếu doanh nghiệp đưa ra được những hướng giải quyết, thay đổi sẽ giúp biến thách thức thành cơ hội, từ đó, doanhnghiệp sẽ không ngừng phát triển và vươn xa mạnh mẽ
Doanh nghiệp cần phải có quá trình thay đổi từ cách thức quản lý, điều hành, quá trình sản xuất, từ phương pháp truyền thống sang phương thức ứng dụng công nghệ thông tin vào trong quản lý, quy trình sản xuất một cách toàn diện Ứng dụng quy trình số hóa vào doanh nghiệp, giúp quá trình quản lý tài liệu, hồ sơ được dễ dàng và bảo mật, hay còn gọiví von là “văn phòng không giấy”.
Chính vì vậy, nhóm em lựa chọn đề tài “Xây dựng cơ sở quản lý thư viện” với mục đích tìm hiểu rõ về quy mô, lĩnh vực quản lý Song nhằm giúp hệ thống hóa, quản lý thông tin, tài liệu một cách tự động, tối ưu nhất trên máy tính đáp ứng đúng, đủ nhu cầu của người sử dụng.
Trang 5BẢNG PHÂN CHIA NHIỆM VỤ.
Nguyễn XuânTùng Anh
2.1.1 Con trỏ in ra thông tin của sách theo tên sách tác giả thể loại
2.1.2 Con trỏ xem chi tiết đọc giả và tên sách đã mượn2.2.1 Thủ tục thêm phiếu mượn sách mới
2.2.2 Thủ tục xóa phiếu mượn sách và chi tiết phiếu mượn2.3.1 Hàm xem tổng số lượng sách theo từng thể loại2.3.2 Hàm in ra danh sách sách đã mượn của độc giả2.4.1 View xem số lượng sách còn lại
2.4.2 View xem chi tiết thông tin phiếu mượn
2.5.1 Trigger tự động cập nhật sách khi thêm phiếu mượn2.5.2 Trigger tự động cập nhật sách khi xóa phiếu mượn2.6.1 Cấp quyền cho một user (TungAnh176)
2.7.1 Read Uncommitted (Chưa cô lập đọc)Vũ Văn
2.4.4 View với mã tác, giả tên tác giả, tên tác phẩm, thể loại mà tác giả có quê ở Hải Phòng
2.5.3 Trigger kiểm tra sách đã tồn tại chưa.
2.5.4 Trigger khi sửa một độc giả thì thông báo sửa thành công
2.6.2 Cấp quyền cho một user (CHINH0705)2.7.2 Read Committed (Đã cô lập đọc)
Ngô Anh Quý 2.1.5 Con trỏ hiển thị tên thủ thư, số điện thoại thủ thư và số lần cho mượn sách
2.1.6 Con trỏ hiển thị tên thủ thư, tuổi, địa chỉ và số điện thoạicủa thủ thư
2.2.5 Thủ tục lấy danh sách các sách đã được mượn bởi 1 độc giả với mã độc giả được nhập từ bàn phím
2.2.6 Thủ tục tính tổng tiền sách 1 độc giả đã mượn với mã độc giả nhập từ bàn phím
2.3.5 Hàm trả về thông tin cuốn sách được mượn nhiều nhất2.3.6 Hàm trả về thông tin độc giả bao gồm mã độc giả, tên,
5
Trang 6ngày sinh, địa chỉ, số điện thoại đã thực hiện trả sách trong tháng 2 năm 2024
2.4.5 View hiển thị thông tin những độc giả dưới 25 tuổi2.4.6 View hiển thị độc giả và thể loại sách đã mượn2.5.5 Trigger tự động xóa tác giả khi xóa mã tác giả từ bàn phím
2.5.6 Trigger kiểm tra thủ thư đã tồn tại chưa2.6.3 Cấp quyền cho một user (QUY0211)2.7.3 Repeatable Read (Lặp lại đọc)Nguyễn Văn
Mạnh 2.1.7 Con trỏ lấy tên đầu tiên của tác giả 2.1.8 Con trỏ lấy tên sách và tên tác giả của các sách trong thểloại 'cong nghe-kinh te'
2.2.7 Thủ tục lấy danh sách các độc giả có số điện thoại kết thúc bằng '1234'
2.2.8 Thủ tục lấy tổng số lượng sách trong bảng SACH 2.3.7 Hàm tính số lượng sách theo thể loại
2.3.8 Hàm tính tổng tiền cọc của độc giả 2.4.7 View hiển thị sách của mỗi tác giả
2.4.8 View hiển thị độc giả và số cuốn sách đã mượn 2.5.7 Trigger cập nhật số điện thoại của tác giả2.5.8 Trigger xóa tác giả
2.6.4 Cấp quyền cho một user (MANH69)2.7.4 Serializable (Khóa toàn bộ)
Trang 7PHẦN 1: THIẾT KẾ CƠ SỞ DỮ LIỆU1.1 Cơ sở dữ liệu
1.1.1 Giới thiệu chung
Thư viện cần xây dựng một cơ sở dữ liệu để quản lý việc mượn và quản lý sách trong thư viện Hệ thống cần ghi nhận các hoạt động mượn/trả sách và quản lý việc thanhtoán với độc giả Ngoài ra, cơ sở dữ liệu cũng có người thủ thư nắm bắt được tình hình mượn và quản lý sách Đồng thời, hệ thống cũng giúp thủ thư nắm bắt được sách trong thư viện, kiểm kê sách trong thư viện cũng như việc thanh toán, lập phiếu mượn cho độc giả.
1.1.2 Yêu cầu chung
Yêu cầu của cơ sở dữ liệu quản lý thư viện:
Hệ thống quản lý thư viện rất quan trọng trong việc lưu trữ dữ liệu thông tin độc giả mượn sách Dữ liệu độc giả thuê và mượn sách không thể bị nhầm lẫn không sẽ dẫn đến hậu quả nghiêm trọng như phải đền tiền sách Chính vì vậy, hệ thống sẽ có phân quyền riêng cho từng đối tượng sử dụng đối với một số chức năng nào đó trong hệ thống Xây dựng và Quản lý Phần mềm Thư Viện Quản lý sẽ có các đối tượng sử dụng sau: Ban quản lý được toàn quyền sử dụng các chức năng của hệ thống; thủ thư sẽ quản lý thông tin sách (trả sách, mượn sách, thuê sách)
- Yêu cầu về chương trình:+ Đảm bảo tính bảo mật của dữ liệu
+ Hỗ trợ người cập nhật sửa đổi, tìm kiếm thông tin… thông qua các form và tính toán các thông số
+ Quản lý các phiếu mượn.+ Lưu trữ thông tin.
1.1.3 Phương pháp giải quyết bài toán
7
Trang 8Đọc, tìm tài liệu trên word, internetTrao đổi với giáo viên hướng dẫn
Sử dụng các công cụ: SQL Server, Chat GPT1.2 Mô hình quan hệ (Diagram)
THỰC THỂ "SACH" (Sách):MASACH (Mã sách), TENSACH (Tên sách), MATL (Mã thể loại) - Khóa ngoại, MANXB (Mã nhà xuất bản) - Khóa ngoại, MATG (Mã tác giả) - Khóa ngoại, TUSACH (Tủ sách), NGANSACH (Ngăn sách), SOLUONG (Số lượng), GIATHUE (Giá thuê),
THỰC THỂ "PHIEUMUONSACH" (Phiếu mượn sách):MAPM (Mã phiếu mượn sách), MADG (Mã độc giả) - Khóa ngoại, MATT (Mã thủ thư) - Khóa ngoại, NGAYMUON (Ngày mượn), NGAYTRA (Ngày trả), TIENCOC (Tiền cọc)
THỰC THỂ "CHITIETPM" (Chi tiết phiếu mượn):MAPM (Mã phiếu mượn sách) - Khóa ngoại, MASACH (Mã sách) - Khóa ngoại, SOLUONG (Số lượng)
1.2.2 Mô hình E-R
Trang 91.2.3 Mô hình quan hệ
PHẦN 2 THỰC NGHIỆM2.1 Con trỏ (Cursor)
9
Trang 102.1.1 Con trỏ in ra thông tin của sách theo tên sách tác giả thể loạia Câu lệnh
DECLARE @ten_sach NVARCHAR(100);DECLARE @ten_tac_gia NVARCHAR(100);DECLARE @ten_the_loai NVARCHAR(100);DECLARE book_info_cursor CURSOR FOR
SELECT SACH.TENSACH, TACGIA.TENTG, THELOAI.TENTL FROM SACH
INNER JOIN TACGIA ON SACH MATG TACGIA = MATG INNER JOIN THELOAI ON SACH MATL THELOAI = MATL;OPEN book_info_cursor;
FETCH NEXT FROM book_info_cursor INTO @ten_sach, @ten_tac_gia ,@ten_the_loai;
WHILE @@FETCH_STATUS 0=BEGIN
PRINTN'Tên Sách: ' @ten_sach + +N', Tác Giả: ' @ten_tac_gia + +N', Thể Loại: ' @ten_the_loai+ ;
FETCH NEXT FROM book_info_cursor INTO @ten_sach @ten_tac_gia , ,@ten_the_loai;
CLOSE book_info_cursor;DEALLOCATE book_info_cursor;b.Kết quả
2.1.2 Con trỏ xem chi tiết độc giả và tên sách đã mượn
Trang 11a Câu lệnh
DECLARE @ten_doc_gia NVARCHAR(100);DECLARE @ten_sach_muon NVARCHAR(100);DECLARE doc_gia_sach_muon_cursor CURSOR FOR SELECT DOCGIA.TENDG, SACH.TENSACH FROM DOCGIA
INNER JOIN PHIEUMUONSACH ON DOCGIA MADG =PHIEUMUONSACH MADG.
INNER JOIN CHITIETPM ON PHIEUMUONSACH MAPM =CHITIETPM MAPM.
INNER JOIN SACH ON CHITIETPM MASACH SACH = MASACH;OPEN doc_gia_sach_muon_cursor;
FETCH NEXT FROM doc_gia_sach_muon_cursor INTO @ten_doc_gia,@ten_sach_muon;
WHILE @@FETCH_STATUS 0=BEGIN
PRINTN'Tên Độc Giả: ' @ten_doc_gia + +N', Sách Đã Mượn: ' +@ten_sach_muon;
FETCH NEXT FROM doc_gia_sach_muon_cursor INTO@ten_doc_gia, @ten_sach_muon;
CLOSE doc_gia_sach_muon_cursor;DEALLOCATE doc_gia_sach_muon_cursor;b Kết quả
11
Trang 122.1.3 Con trỏ hiển thị tên độc giả, số điện thoai và số lần mượn sácha Câu lênh
DECLARE DOCGIA_SOLANMUON CURSOR FOR SELECT DOCGIA.TENDG, DOCGIA.SODT,
COUNT(PHIEUMUONSACH.MAPM) AS SOLANMUON FROM DOCGIA
Trang 13LEFTJOIN PHIEUMUONSACH ON DOCGIA MADG =PHIEUMUONSACH MADG.
GROUP BY DOCGIA.TENDG, DOCGIA.SODT; Khai báo biến để lưu trữ dữ liệu từ con trỏ
DECLARE @TENDG NVARCHAR(100 @SODT ), NVARCHAR(100 ),@SOLANMUON INT;
Mở con trỏ
OPEN DOCGIA_SOLANMUON; Lấy dữ liệu từ con trỏ và hiển thị
FETCH NEXT FROM DOCGIA_SOLANMUON INTO @TENDG, @SODT,@SOLANMUON;
WHILE @@FETCH_STATUS= 0BEGIN
PRINT N'Tên độc giả: ' @TENDG + +N', Số điện thoại: ' @SODT + +N', Số lần mượn sách: ' +CAST(@SOLANMUON AS NVARCHAR(10));
FETCH NEXT FROM DOCGIA_SOLANMUON INTO @TENDG @SODT , ,@SOLANMUON;
END Đóng con trỏ
CLOSE DOCGIA_SOLANMUON;DEALLOCATE DOCGIA_SOLANMUON;b Kết quả
2.1.4 Con trỏ hiển thị tên độc giả, số điện thoai và tổng số tiền cọca Câu lênh
Tạo con trỏ
DECLARE DOCGIA_TONGTIENCOC CURSOR FOR13
Trang 14SELECT DOCGIA.TENDG, DOCGIA.SODT,SUM(CHITIETPM.SOLUONG *SACH GIATHUE ) AS TONGTIENCOC
FROM DOCGIA
JOIN PHIEUMUONSACH ON DOCGIA MADG PHIEUMUONSACH = MADG JOIN CHITIETPM ON PHIEUMUONSACH MAPM CHITIETPM = MAPM JOIN SACH ON CHITIETPM MASACH SACH = MASACH
GROUP BY DOCGIA.TENDG, DOCGIA.SODT; Khai báo biến để lưu trữ dữ liệu từ con trỏ
DECLARE @TENDG NVARCHAR(100 @SODT ), NVARCHAR(100 ),@TONGTIENCOC MONEY;
Mở con trỏ
OPEN DOCGIA_TONGTIENCOC; Lấy dữ liệu từ con trỏ và hiển thị
FETCH NEXT FROM DOCGIA_TONGTIENCOC INTO @TENDG, @SODT,@TONGTIENCOC;
WHILE @@FETCH_STATUS= 0BEGIN
PRINT N'Tên độc giả: ' @TENDG + +N', Số điện thoại: ' @SODT + +N', Tổng tiền cọc: '+CAST(@TONGTIENCOC AS NVARCHAR( ));20
FETCH NEXT FROM DOCGIA_TONGTIENCOC INTO @TENDG @SODT , ,@TONGTIENCOC;
END Đóng con trỏ
CLOSE DOCGIA_TONGTIENCOC;DEALLOCATE DOCGIA_TONGTIENCOC;b Kết quả
2.1.5 Con trỏ hiển thị tên thủ thư, số điện thoại thủ thư và số lần cho
Trang 15mượn sácha Câu lênh Khai báo các biến
DECLARE @TenThuThu NVARCHAR(100);DECLARE @SoDienThoai NVARCHAR(100);DECLARE @SoLanMuon INT;
Khai báo con trỏ
DECLARE thuthu_cursor CURSOR FORSELECT TENTT, SODT
FROM THUTHU; Mở con trỏOPEN thuthu_cursor;
Lặp qua từng dòng dữ liệu của con trỏ
FETCH NEXT FROM thuthu_cursor INTO @TenThuThu @SoDienThoai, ;WHILE @@FETCH_STATUS= 0
Tính số lần cho mượn sách SELECT @SoLanMuon =COUNT(*) FROM PHIEUMUONSACH
INNER JOIN THUTHU
ON THUTHU.MATT = PHIEUMUONSACH.MATT WHERE TENTT @TenThuThu= ;
Hiển thị thông tin
PRINT N'Tên Thủ Thư: ' @TenThuThu+ ; PRINT N'Số Điện Thoại: '+ @SoDienThoai;
PRINT N'Số Lần Cho Mượn Sách: ' +CAST(@SoLanMuon AS NVARCHAR( ));10 PRINT ' -';
Lấy dòng tiếp theo của con trỏ
FETCH NEXT FROM thuthu_cursor INTO @TenThuThu @SoDienThoai, ;END
Đóng con trỏCLOSE thuthu_cursor;DEALLOCATE thuthu_cursor;b Kết quả
15
Trang 162.1.6 Con trỏ hiển thị tên thủ thư, tuổi, địa chỉ và số điện thoại của thủ thư
a Câu lênh Khai báo các biến
DECLARE @TenThuThu NVARCHAR(100);DECLARE @Tuoi INT;
DECLARE @DiaChi NVARCHAR(100);DECLARE @SoDienThoai NVARCHAR(100); Khai báo con trỏ
DECLARE thongtin_thuthu_cursor CURSOR FOR
SELECT TENTT,DATEDIFF(YEAR, NGAYSINH ,GETDATE())AS Tuoi DIACHI , ,SODT
FROM THUTHU; Mở con trỏ
OPEN thongtin_thuthu_cursor; Lặp qua từng dòng dữ liệu của con trỏ
FETCH NEXT FROM thongtin_thuthu_cursor INTO @TenThuThu @Tuoi, , @DiaChi,@SoDienThoai;
WHILE @@FETCH_STATUS= 0BEGIN
Hiển thị thông tin
PRINT N'Tên Thủ Thư: ' @TenThuThu+ ;
PRINT N'Tuổi: ' +CAST(@Tuoi AS NVARCHAR(10));
Trang 17PRINT N'Địa Chỉ: '+ @DiaChi;
PRINT N'Số Điện Thoại: '+ @SoDienThoai; PRINT ' -'; Lấy dòng tiếp theo của con trỏ
FETCH NEXT FROM thongtin_thuthu_cursor INTO @TenThuThu @Tuoi , ,@DiaChi, @SoDienThoai;
END Đóng con trỏ
CLOSE thongtin_thuthu_cursor;DEALLOCATE thongtin_thuthu_cursor;b Kết quả
2.1.7 Con trỏ lấy tên đầu tiên của tác giả a Câu lênh
DECLARE @TENTG NVARCHAR(100);DECLARE authorCursor CURSOR FORSELECT TENTG
FROM TACGIA;OPEN authorCursor;
17
Trang 18FETCH NEXT FROM authorCursor INTO @TENTG;WHILE @@FETCH_STATUS = 0
PRINT 'Tên tác giả: ' + @TENTG;
FETCH NEXT FROM authorCursor INTO @TENTG;END;
CLOSE authorCursor;DEALLOCATE authorCursor;b Kết quả
2.1.8 Con trỏ lấy tên sách và tên tác giả của các sách trong thể loại 'cong nghe-kinh te'
CLOSE contro2;DEALLOCATE contro2;b Kết quả
Trang 19@MASACH NVARCHAR(100), @SOLUONG INT
IF NOT EXISTS (SELECT 1 FROM PHIEUMUONSACH WHERE MAPM = @MAPM)
Trang 20ELSE BEGIN
PRINT N'Mã phiếu mượn đã tồn tại Vui lòng chọn mã phiếu mượn khác.' END
Chạy thủ tục trên
DECLARE @MAPM NVARCHAR(100) = 'PM033'DECLARE @MADG NVARCHAR(100) = N'DG001'DECLARE @MATT NVARCHAR(100) = N'TT001'
DECLARE @NGAYMUON NVARCHAR(100) = '2024-01-18'DECLARE @NGAYTRA NVARCHAR(100) = '2024-01-25'DECLARE @TIENCOC MONEY = 50.00
DECLARE @MASACH NVARCHAR(100) = N'S031'DECLARE @SOLUONG INT = 2
EXEC ThemPhieuMuonSach @MAPM,
@MADG,@MATT,@NGAYMUON,@NGAYTRA,@TIENCOC,@MASACH,@SOLUONGb Kết quả
Trang 212.2.2 Thủ tục xóa phiếu mượn sách và chi tiết phiếu mượna Câu lệnh
CREATE PROCEDURE XoaPhieuMuonSach( @MAPM NVARCHAR(100)
IF EXISTS (SELECT 1 FROM PHIEUMUONSACH WHERE MAPM = @MAPM) BEGIN
DELETE FROM CHITIETPM WHERE MAPM = @MAPM DELETE FROM PHIEUMUONSACH WHERE MAPM = @MAPM
21
Trang 22PRINT N'Phiếu mượn sách đã được xóa thành công!' END
ELSE BEGIN
PRINT N'Không tìm thấy phiếu mượn với mã ' + @MAPM + '.' END
END chạy thủ tục
EXEC XoaPhieuMuonSach N'PM033';b Kết quả
Trang 232.2.3 Thủ tục tính tuổi hiện tại của một độc giả bất kỳ với tên độc giả được nhập từ bàn phím.
a Câu lệnh:
CREATE PROCEDURE sp_tinhtuoi_tendg @TENDG NVARCHAR(100)AS
WHERE TENDG @TENDG= ;
Nếu không tìm thấy độc giả, in ra thông báo23
Trang 24@NGAYSINH IF IS NULL BEGIN
PRINT N'Không tìm thấy độc giả với tên ' @TENDG+ ; END
ELSE BEGIN
Tính tuổi hiện tại DECLARE @TUOI INT;
SET @TUOI =DATEDIFF YEAR( , @NGAYSINH ,GETDATE()); In ra kết quả
PRINT N'Tuổi của độc giả ' @TENDG + +N' là ' +CAST(@TUOI ASNVARCHAR) + N' năm.';
ENDEND; Hiển thị kết quả
EXEC sp_tinhtuoi_tendg @TENDG =N'Nguyễn Văn A';b Kết quả
2.2.4 Thủ tục hiển thị tổng số lượng sách đã mượn với tên sách được nhậptừ bàn phím.
a Câu lệnh:
CREATE PROCEDURE sp_TinhTongSoLuongSachMuon @TenSach NVARCHAR(100)
ASBEGIN
Trang 25PRINT N'Tổng số lượng sách "' @TenSach + +N'" đã mượn là: ' +CAST ISNULL( (@TongSoLuong, 0) AS NVARCHAR( ));10END;
DECLARE @TenSach NVARCHAR(100)='Sách 1'; Thực hiện thủ tục để hiển thị tổng số lượng sách đã mượn
EXEC sp_TinhTongSoLuongSachMuon @TenSach;b Kết quả
2.2.5 Thủ tục lấy danh sách các sách đã được mượn bởi 1 độc giả với mã độc giả được nhập từ bàn phím
a Câu lệnh:
CREATE PROCEDURE DG_MuonSach @MADG NVARCHAR(100)AS
Lấy thông tin về sách đã được mượn bởi độc giả SELECT
PM MAPM AS MAPM, S MASACH AS MASACH, S TENSACH AS TENSACH, PM NGAYMUON AS NGAYMUON, PM NGAYTRA AS NGAYTRA FROM
PHIEUMUONSACH PM INNERJOIN
CHITIETPM CT ON PM MAPM CT = MAPM INNERJOIN
SACH S ON CT MASACH S = MASACH WHERE
PM MADG @MADG = ;END;
DECLARE @MASACH NVARCHAR(100);25
Trang 26SET @MASACH ='DG001'; Thay đổi mã độc giả EXEC DG_MuonSach @MADG = @MASACH;b Kết quả
2.2.6 Thủ tục tính tổng tiền sách 1 độc giả đã mượn với mã độc giả nhập từ bàn phím
a Câu lệnh:
CREATE PROCEDURE TongTien @MADG NVARCHAR(100)AS
CHITIETPM CT ON PM MAPM CT = MAPM INNERJOIN
SACH S ON CT MASACH S = MASACH WHERE
PM MADG @MADG = ;END;
DECLARE @MASACH NVARCHAR(100);SET @MASACH ='DG001'; Thay đổi mã độc giả
EXEC TongTien @MADG @MASACH= ;b Kết quả
Trang 272.2.7 Thủ tục lấy danh sách các độc giả có số điện thoại kết thúc bằng '1234'
WHERE SODT LIKE '%1234';END;
EXEC thutuc1;b Kết quả
2.2.8 Thủ tục lấy tổng số lượng sách trong bảng SACH a Câu lệnh:
CREATE PROCEDURE thutuc2AS
SELECT SUM(SOLUONG) AS TongSoLuongSach FROM SACH;
END;EXEC thutuc2;b Kết quả
27
Trang 28DECLARE @SoLuongSach INT
SELECT @SoLuongSach = SUM(SOLUONG) FROM SACH
WHERE MATL = @MATL RETURN @SoLuongSachEND
Chạy hàm in ra số lượng sách
DECLARE @MATL NVARCHAR(100) = N'TL001'DECLARE @SoLuongSach INT
SELECT @SoLuongSach = dbo.SoLuongSach(@MATL)
PRINT N'Số lượng sách theo thể loại ' + @MATL + N' là: ' + CAST(@SoLuongSach ASNVARCHAR(10))
b Kết quả
Trang 292.3.2 Hàm in ra danh sách sách đã mượn của độc giảa Câu lệnh
CREATE FUNCTION DanhSachMuonSach (@MADG NVARCHAR(100))RETURNS TABLE
SELECT PM.MAPM, S.MASACH, S.TENSACH, PM.NGAYMUON, PM.NGAYTRA FROM
PHIEUMUONSACH PM JOIN
CHITIETPM CPM ON PM.MAPM = CPM.MAPM JOIN
SACH S ON CPM.MASACH = S.MASACH WHERE
PM.MADG = @MADG)
Chạy hàm in ra danh sách phiếu mượn của độc giảSELECT * FROM dbo.DanhSachMuonSach(N'DG001');b Kết quả
29
Trang 302.3.3 Hàm xem tổng số lượng sách theo mã nhà xuất bảna Câu lệnh
CREATE FUNCTION dbo.TongSoLuongSachTheoNXB(@MaNXB NVARCHAR(100))
RETURNS INTAS
DECLARE @TongSoLuong INT;
SELECT @TongSoLuong = SUM(SOLUONG) FROM SACH
WHERE MANXB = @MaNXB;
RETURN ISNULL(@TongSoLuong, 0);END;
SELECT SACH.MASACH, TENSACH, TENTL, TENNXB, SOLUONG, GIATHUE
Trang 312.3.5 Hàm trả về thông tin cuốn sách được mượn nhiều nhấta Câu lệnh
CREATE FUNCTION SachMuonNN()RETURNS TABLE
SELECT TOP 1
SACH TENSACH AS'Tên sách', SACH TUSACH AS'Tủ sách', SACH NGANSACH AS'Ngăn sách',
COUNT(CHITIETPM MASACH AS ) 'Số lần mượn' FROM
SACH JOIN
CHITIETPM ON SACH MASACH CHITIETPM = MASACH GROUP BY
SACH.TENSACH, SACH.TUSACH, SACH.NGANSACH ORDER BY
COUNT(CHITIETPM MASACH DESC ));
Sử dụng hàm
SELECT FROM* SachMuonNN();b Kết quả
31