Tải bản đầy đủ (.pdf) (63 trang)

báo cáo bài tập lớn hệ quản trị cơ sở dữ liệu đề tài quản lý thư viện

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.45 MB, 63 trang )

<span class="text_page_counter">Trang 1</span><div class="page_container" data-page="1">

TRƯỜ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 Q - 2151173817Nguyễn Văn Mạnh - 2151173797

Hà Nội, ngày 20 tháng 01 năm 2024

</div><span class="text_page_counter">Trang 2</span><div class="page_container" data-page="2">

MỤ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 tố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

</div><span class="text_page_counter">Trang 3</span><div class="page_container" data-page="3">

2.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 tồn bộ)...61

PHẦN 3: KẾT LUẬN...63

3

</div><span class="text_page_counter">Trang 4</span><div class="page_container" data-page="4">

LỜ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 tồ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.

</div><span class="text_page_counter">Trang 5</span><div class="page_container" data-page="5">

BẢ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

</div><span class="text_page_counter">Trang 6</span><div class="page_container" data-page="6">

ngà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 <sup>2.1.7. Con trỏ lấy tên đầu tiên của tác giả </sup>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 tồn bộ)

</div><span class="text_page_counter">Trang 7</span><div class="page_container" data-page="7">

PHẦN 1: THIẾT KẾ CƠ SỞ DỮ LIỆU

1.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ả. Ngồ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)

- 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 tố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 tốn

7

</div><span class="text_page_counter">Trang 8</span><div class="page_container" data-page="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

</div><span class="text_page_counter">Trang 9</span><div class="page_container" data-page="9">

1.2.3. Mơ hình quan hệ

PHẦN 2. THỰC NGHIỆM

2.1. Con trỏ (Cursor)

9

</div><span class="text_page_counter">Trang 10</span><div class="page_container" data-page="10">

2.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

</div><span class="text_page_counter">Trang 11</span><div class="page_container" data-page="11">

a. 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

</div><span class="text_page_counter">Trang 12</span><div class="page_container" data-page="12">

2.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

</div><span class="text_page_counter">Trang 13</span><div class="page_container" data-page="13">

LEFTJOIN 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

</div><span class="text_page_counter">Trang 14</span><div class="page_container" data-page="14">

SELECT 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

</div><span class="text_page_counter">Trang 15</span><div class="page_container" data-page="15">

mượ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

</div><span class="text_page_counter">Trang 16</span><div class="page_container" data-page="16">

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ư

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

</div><span class="text_page_counter">Trang 17</span><div class="page_container" data-page="17">

PRINT 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

</div><span class="text_page_counter">Trang 18</span><div class="page_container" data-page="18">

FETCH 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ả

</div><span class="text_page_counter">Trang 19</span><div class="page_container" data-page="19">

@MASACH NVARCHAR(100), @SOLUONG INT

IF NOT EXISTS (SELECT 1 FROM PHIEUMUONSACH WHERE MAPM = @MAPM)

</div><span class="text_page_counter">Trang 20</span><div class="page_container" data-page="20">

ELSE 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ả

</div><span class="text_page_counter">Trang 21</span><div class="page_container" data-page="21">

2.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

</div><span class="text_page_counter">Trang 22</span><div class="page_container" data-page="22">

PRINT 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ả

</div><span class="text_page_counter">Trang 23</span><div class="page_container" data-page="23">

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.

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

</div><span class="text_page_counter">Trang 24</span><div class="page_container" data-page="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

</div><span class="text_page_counter">Trang 25</span><div class="page_container" data-page="25">

PRINT 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

</div><span class="text_page_counter">Trang 26</span><div class="page_container" data-page="26">

SET @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ả

</div><span class="text_page_counter">Trang 27</span><div class="page_container" data-page="27">

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'

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

</div><span class="text_page_counter">Trang 28</span><div class="page_container" data-page="28">

DECLARE @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ả

</div><span class="text_page_counter">Trang 29</span><div class="page_container" data-page="29">

2.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

</div><span class="text_page_counter">Trang 30</span><div class="page_container" data-page="30">

2.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

</div><span class="text_page_counter">Trang 31</span><div class="page_container" data-page="31">

2.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

</div>

×