Microsoft Word ITEC CSDLNC TH V5 docx ITEC – Thực Hành Cơ Sở Dữ Liệu Nâng Cao – HKII 1516 GV biên soạn TS Lê Thị Nhàn ThS Vũ Thị Mỹ Hằng ThS Tiết Gia Hồng Trang 9 | 38 TUẦN 3 – THỦ TỤC THƯỜNG TRÚ (STO[.]
ITEC – Thực Hành Cơ Sở Dữ Liệu Nâng Cao – HKII.1516 TUẦN – THỦ TỤC THƯỜNG TRÚ (STORED PROCEDURE) I HƯỚNG DẪN a Định nghĩa tính chất thủ tục thường trú – stored procedure Định nghĩa: tập hợp lệnh đóng gói lưu trữ lại database người dùng gọi thực thi cần Ưu điểm: Tăng tốc độ truy vấn Giảm lưu lượng truyền liệu đến server Linh hoạt, tái sử dụng Bảo mật Thành phần: Tên thủ tục Tham số o Tham số đầu vào (input): chứa giá trị người dùng cung cấp cho thủ tục gọi thủ tục o Tham số đầu (output): chứa kết trả cho người dùng Thân thủ tục – nội dung thực thi thủ tục b Khai báo, sử dụng biến Biến cần khai báo lệnh declare gán giá trị lệnh set trước sử dụng Tất biến người dùng định nghĩa T-SQL phải bắt đầu @ DECLARE @bien1 KDL, @bien2 KDL, … SET @bien = gia_tri gán biến giá trị cụ thể, ví dụ: @ms = ‘1102’ = @bien2 gán biến biến khác = (SELECT A FROM BANG, …) gán biến kết câu truy vấn Người dùng gán lúc nhiều giá trị trả từ câu truy vấn vào biến khác SELECT @bien1 = A, @bien2 = B FROM BANG, … Lưu ý: Khi dùng lệnh SET để gán kết từ câu truy vấn cho biến câu truy vấn trả tối đa dòng cột, cột chọn trả phải miền giá trị với biến Khi dùng lệnh SELECT để gán nhiều giá trị vào biến khác từ kết câu truy vấn miền giá trị biến phải tương ứng giống với miền giá trị cột thuộc tính trả từ câu truy vấn gán vào biến Ngoài ra, câu truy vấn trả dòng c Tạo thủ tục GV biên soạn: TS Lê Thị Nhàn - ThS Vũ Thị Mỹ Hằng - ThS Tiết Gia Hồng Trang | 38 ITEC – Thực Hành Cơ Sở Dữ Liệu Nâng Cao – HKII.1516 CREATE PROC sp_TenProc @ts1 KDL [in | out], @ts2 KDL [in | out], … AS BEGIN T_SQL END GO Lưu ý: Khơng cần thêm từ khóa in khai báo tham số đầu vào Bắt buộc phải có từ khóa out khai báo tham số đầu Một thủ tục có nhiều tham số đầu vào đầu khơng có tham số Trong thủ tục sử dụng lệnh return để trả số nguyên d Chỉnh sửa, xóa thủ tục Chỉnh sửa: ALTER PROC sp_TenProc @ts1 KDL [in | out], @ts2 KDL [in | out], … AS BEGIN T_SQL END GO Xóa: DROP PROC sp_TenProc e Cấu trúc điều khiển Điều kiện rẽ nhánh: IF điều_kiện BEGIN lệnh_1 … END IF điều_kiện BEGIN lệnh_1 … END ELSE BEGIN lệnh_1 … END CASE giá_trị WHEN … THEN … WHEN … THEN … WHEN … THEN … END Vòng lặp: WHEN điều_kiện BEGIN lệnh_1 … END f Xuất liệu GV biên soạn: TS Lê Thị Nhàn - ThS Vũ Thị Mỹ Hằng - ThS Tiết Gia Hồng Trang 10 | 38 ITEC – Thực Hành Cơ Sở Dữ Liệu Nâng Cao – HKII.1516 Dùng lệnh select: liệu xuất dạng bảng Dùng lệnh print: liệu xuất dạng chuỗi thông điệp g Thực thi thủ tục Truyền tham số tường minh: EXEC ten_thu_tuc @ts1 = @bien1 [in | out], @ts2 = @bien2 [in | out], … Truyền tham số không tường minh: EXEC ten_thu_tuc @bien1 [in | out], @bien2 [in | out], … Bắt giá trị thủ tục trả lệnh return: EXEC @kq = ten_thu_tuc @bien1, @bien2, … Lưu ý: Truyền tham số tường minh không cần quan tâm thứ tự khai báo tham số lúc tạo thủ tục Truyền tham số khơng tường minh biến truyền vào gán vào tham số thủ tục theo thứ tự khai báo tham số tạo thủ tục, cần truyền xác thứ tự biến Biến gán vào tham số phải miền giá trị với tham số Thủ tục trả số nguyên Ví dụ 1: Viết stored procedure in “Hello World” Ví dụ 2: Viết stored procedure nhận vào tên in “Hello ” + tên GV biên soạn: TS Lê Thị Nhàn - ThS Vũ Thị Mỹ Hằng - ThS Tiết Gia Hồng Trang 11 | 38 ITEC – Thực Hành Cơ Sở Dữ Liệu Nâng Cao – HKII.1516 Ví dụ 3: Viết stored procedure kiểm tra số a chẵn hay lẻ, trả a chẵn trả a lẻ Cách 1: Sử dụng lệnh return trả kết kiểm tra Cách 2: Sử dụng tham số output chứa kết kiểm tra Ví dụ 4: Viết stored procedure nhận vào n, m in số lẻ nằm đoạn n, m Yêu cầu sử dụng lại stored procedure ví dụ GV biên soạn: TS Lê Thị Nhàn - ThS Vũ Thị Mỹ Hằng - ThS Tiết Gia Hồng Trang 12 | 38 ITEC – Thực Hành Cơ Sở Dữ Liệu Nâng Cao – HKII.1516 Có thể dùng lệnh: exec @kq = sp_kiemtrachanle @i Trong trường hợp kết kiểm tra trả qua lệnh return thân thủ tục II BÀI TẬP Viết stored procedure thực yêu cầu sau: Nhận vào hai số a, b trả tổng a, b Nhận vào hai số a, b trả hiệu a, b Nhận vào hai số a, b trả tích a, b Nhận vào hai số a, b trả thương a, b Nhận vào hai số a, b trả số dư phép chia a cho b Nhận vào hai số a, b i Nếu i trả tổng a, b Nếu i trả hiệu a, b Nếu i trả tích a, b Nếu i trả thương a, b Nếu i trả số dư phép chia a cho b Yêu cầu: sử dụng lại stored procedure câu đến câu dùng case để xét giá trị i Nhận vào n, m trả tổng giá trị nằm đoạn n, m (dùng tham số output) Nhận vào năm n, kiểm tra xem n có phải năm nhuận khơng Nếu n năm nhuận trả cịn khơng phải trả (dùng tham số output) Nhận vào năm n, m, đếm xem có năm nhuận đoạn n đến m (dùng tham số output) 10 Nhận vào n trả giá trị n!, biết n! = 1*2*3*…*n 11 Nhận vào ngày a (kiểu date datetime) cho biết tháng ngày a có ngày Ví dụ: ngày a ngày 15/02/2000 trả 28 số ngày tháng năm 2000 12 Nhận vào n, kiểm tra xem n có phải số ngun tố khơng Nếu số ngun tố trả cịn khơng trả 13 Nhận vào n, m trả tích số nguyên tố nằm đoạn n, m (dùng tham số output) Lưu ý: số nguyên tố số có hai ước chung nó, ví dụ: 13, 17, 14 Nhận vào n, kiểm tra xem n có phải số phương khơng Nếu số phương trả cịn khơng trả Lưu ý: số phương bình phương số khác, ví dụ: 4, 9, 15 Nhận vào n, m trả tổng số phương nằm đoạn n, m (dùng tham số output) GV biên soạn: TS Lê Thị Nhàn - ThS Vũ Thị Mỹ Hằng - ThS Tiết Gia Hồng Trang 13 | 38