Giáo trình SQL server 2000
Trang 1ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 1
Hệ quản trị CSDL SQL Server
CHƯƠNG 4: THỦ TỤC NỘI TẠI
Trang 2ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 2
Chương 4: Thủ tục nội tại
Nội dung
Khái niệm Tham số bên trong thủ tục nội tại Một số vấn đề khác trong thủ tục nội tại Giao tác (transaction)
Trang 3ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 3
4.1 Khái niệm
Thủ tục nội tại (store procedure) là một tập hợp chứa các dòng lệnh, các biến, các cấu trúc dùng để thực hiện một hành động nào đó
Nội dung của thủ tục nội tại sẽ được lưu trữ tại CSDL của MS SQL SERVER
Phạm vi hoạt động của thủ tục nội tại do người dùng tạo ra chỉ có tính cục bộ bên trong một CSDL mà nó lưu trữ
Các NNLT khác có thể gọi thủ tục nội tại một cách dễ dàng
Thực thi nhanh vì nội dung bên trong thủ tục đã được phân tích cú pháp khi chúng được tạo mới
Trang 4ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 4 4.1.1 Tạo mới thủ tục nội tại
Các bước thực hiện
Trang 5ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 5 4.1.1 Tạo mới thủ tục nội tại
Các bước thực hiện
Trang 6ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 6
4.1.1 Tạo mới thủ tục nội tại
Ngoài ra có thể tạo mới thủ tục nội tại bằng lệnh CREATE PROCEDURE
Cú pháp:
CREATE PROCEDURE Ten_Thu_Tuc
@tên_tham_số kiểu_dữ_liệu loại
AS [DECLARE Bien_cuc_bo]
Các_lệnh
Trang 7ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 7
4.1.1 Tạo mới thủ tục nội tại
Trong đó
Ten_thu_tuc: phải là duy nhất trong CSDL Bien_cuc_bo: là các biến được sử dụng tính toán tạm thời
Các_lệnh: Là các lệnh thực hiện Loại:
• input (không cần ghi)
• output
Trang 8ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 8
4.1.1 Tạo mới thủ tục nội tại
Ví dụ:
CREATE PROCEDURE sp_tblTong AS
DECLARE @ten VARCHAR(30),
@sl INT SELECT @ten = TenHang,
@sl = SoLuong FROM tblTong
WHERE (SoLuong=(Select MAX(SoLuong) From tblTong)) PRINT @ten + ' co doanh so ban cao nhat!'
PRINT 'Voi so luong: ' + CAST(@sl AS VARCHAR(10))
Trang 9ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 9
4.1.2 Gọi thực hiện thủ tục nội tại
Chúng ta chỉ có thể thực hiện thủ tục nội tại EXECUTE trong tiện ích Query Analyzer, hay trong NNLT.
Cú pháp:
EXEC[UTE] Ten_thu_tuc giá_trị | @biến [output]
Ví dụ
EXECUTE sp_tblTong Hoặc:
Trang 10ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 10
4.1.3 Hủy bỏ thủ tục nội tại
Khi không cần sử dụng nữa thì chúng ta có thể hủy bỏ nó ra khỏi CSDL.
Dùng lệnh
DROP PROCEDURE Ten_thu_tuc
Ví dụ:
DROP PROCEDURE sp_tblTong
Trang 11ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 11
4.1.4 Ví dụ
Viết thủ tục xóa các sinh viên theo thành phố trong bảng
sinhvien (masv char(5), tp char(5)) create procedure xoasinhvien
@tp char(5) as
begin
delete from sinhvien where tp = @tp end
Gọi thủ tục
exec xoasinhvien ‘HCM’
Trang 12ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 12
4.1.4 Ví dụ
Viết thủ tục đếm xem có bao nhiêu sinh viên theo thành phố.
create procedure dem @tp char(5), @t int output as
begin select @t = count(*) from sinhvien where tp = @tp
end
declare @tong int exec dem ‘HCM’ , @tong output print @tong
Trang 13ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 13
4.1.4 Ví dụ
Bài tập: Viết hàm sinh ra mã cán bộ tự động theo quy tắc:
Mã cán bộ có dạng: CB0001
‘CB’ : quy định (luôn có)
0001 : là số VD:
• Hiện tại Cán bộ có mã cao nhất là CB0024
• Thì sinh mã mới là CB0025
Trang 14ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 14
4.1.4 Ví dụ
Bài tập:
Create procedure sinhkhoa @s char(10) output as
begin
declare @max int select
@max = max(cast(substring(MCB,3,4)
as int)) + 1 from tblcanbo set @s = '0000' + rtrim(cast(@max as char(4)))
set @s = 'CB' + right(@s,4) end
Trang 15ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 15
4.2 Sử dụng RETURN trong thủ tục
Thông thường sử dụng lệnh RETURN để thoát khỏi thủ tục trong trường hợp dữ liệu không hợp lệ.
Ngoài ra RETURN cho phép trả về 1 số nguyên tại nơi đã gọi thủ tục, khi đó thủ tục trả về giá trị số nguyên, giúp thủ tục có tính năng như 1 hàm.
Cú pháp
RETURN [so_nguyen]
Nếu chỉ sử dụng RETURN thì sẽ trả về 0
Trang 16ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 16
4.3 Thủ tục cập nhật bảng dữ liệu
Thủ tục dạng này sẽ được gọi thực hiện và truyền các giá trị cho tham số từ bên trong một môi trường khác (các NNLT).
CREATE PROCEDURE sp_vattu_them
@sMaVT CHAR(4),
@sTenVT NVARCHAR(50),
AS BEGIN
INSERT INTO VATTU(MAVT,TenVT, DVT, PhanTram) VALUES (@sMaVT, @sTenVT, @sDVT, @nPhanTram) END
Trang 17ctsdhv@yahoo.com SQL SERVER, 1st Edition Chapter 4 Slide 17
4.3 Thủ tục cập nhật bảng dữ liệu
Gọi thủ tục
EXEC sp_vattu_them 'TV001','Ti vi 29 inch Sam sung','Bộ',15
Nếu dữ liệu là xâu Unicode: thêm chữ N
EXEC sp_vattu_them 'TV002',N'Tủ lạnh',N'Chiếc',15
Bài tập
Xem đoạn kiểm tra dữ liệu nhập vào trong tài liệu