Tải bản đầy đủ (.ppt) (68 trang)

Chương 5 thủ tục nội tại (stored procedure) SQL server 2005

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 (1001.75 KB, 68 trang )

Chương 5
THỦ TỤC NỘI TẠI (STORED
PROCEDURE)
5.1 Giới thiệu
5.2 Phân loại thủ tục
5.3 Tạo thủ tục
5.4 Lời gọi thủ tục
5.5 Khai báo và sử dụng biến

SQL Server 2005

1


Chương 5
THỦ TỤC NỘI TẠI (STORED
PROCEDURE)
5.6 Giá trị trả về của tham số trong
thủ tục
5.7 Phát biểu điều khiển
5.8 Tham số với giá trị mặc định
5.9 Sửa đổi thủ tục
5.10 Xoá thủ tục

SQL Server 2005

2


5.1 Giới thiệu thủ tục



Công việc lập trình luôn đòi hỏi khả năng tái
sử dụng mã lệnh



Không những vậy, các đoạn mã lệnh được
tái sử dụng còn phải có tính uyển chuyển, xử
lý linh động theo từng tình huống sử dụng.



Từ đó xuất hiện khái niệm lập trình hướng
thủ tục (functional). Các thủ tục được gọi lại
và điều khiển thông qua hệ thống tham số

SQL Server 2005

3


5.1 Giới thiệu thủ tục
•Việc lập trình trên CSDL cũng không
ngoại lệ. Trong môi trường SQL Server, các
thủ tục được gọi là thủ tục thường trú
(stored procedure – SP).
•Thường trú: Chỉ dịch 1 lần, từ đó lưu trũ
bền vững trong CSDL, bền vững tựa như
các table. Bất cứ khi nào cần, ta chỉ việc gọi
thực hiện


SQL Server 2005

4


5.1 Giới thiệu thủ tục
• Tính tái sử dụng, uyển chuyển nhờ hệ
thống tham số.
• Khi biên dịch SP, SQL Server tối ưu hóa
nó sao cho thực thi hiệu quả nhất. Kết quả
tối ưu hóa được lưu bền vững. Khi gọi thực
thi không cần tối ưu hóa lại lời gọi thủ
tục tiết kiệm thời gian và tài nguyên hơn
khối lệnh tương đương thân thủ tục
• Ứng dụng triển khai theo môi trường
client-server. Client gửi lời gọi SP lên
server thì chiếm dụng đường truyền ít hơn
rất nhiều so với việc gửi khối lệnh tương
đương thân hàm tránh nghẽn đường
truyền, giảm trì trệ
SQL Server 2005

5


5.2 Phân loại thủ tục
Trong SQL Server 2005 có 3 nhóm thủ
tục nội tại sau:
•Nhóm thứ nhất là do người dùng tạo ra.

Nó bao gồm hai loại:

-

-

Loại thủ tục nội tại được
người dùng tạo ra và lưu vào
CSDL. Chúng chứa các phát
biểu T-SQL.
Loại thứ hai được khai báo và
tạo ra bằng ngôn ngữ lập
trình .NET.
SQL Server 2005

6


5.2 Phân loại thủ tục
•Nhóm thứ hai là thủ tục nội tại hệ thống
thực hiện các chức năng quản trị CSDL
thường dùng. Các thủ tục này chứa trong
CSDL Resource.

-

Danh sách các thủ tục nội tại
hệ thống hiển thị trong ngăn
System Stored Procedure
Thủ tục nội tại trong CSDL

Resource luôn có tên với tiền
tố là sp_. Do đó bạn không
nên đặt tên thủ tục nội tại do
mình tạo ra bằng tiền tố này.
SQL Server 2005

7


5.2 Phân loại thủ tục
•Nhóm thứ hai là thủ tục nội tại hệ thống
thực hiện các chức năng quản trị CSDL thường
dùng. Các thủ tục này chứa trong CSDL
Resource.
- Danh sách các thủ tục nội tại hệ
thống hiển thị trong ngăn System
Stored Procedure
- Thủ tục nội tại trong CSDL Resource
luôn có tên với tiền tố là sp_. Do đó
bạn không nên đặt tên thủ tục nội
tại do mình tạo ra bằng tiền tố này.
•Nhóm thứ ba là thủ tục nội tại hệ thống mở
rộng. Loại này cũng được lưu trong CSDL
Resouce nhưng có tên bắt đầu với xp_.
SQL Server 2005

8


5.3 Tạo thủ tục

•Trong khung Object Explorer, chọn
Database chứa thủ tục nội tại cần tạo, chọn
Programmability. Kích nút phải chuột lên
mục Stored Procedures chọn New Stored
Procedure, cửa sổ Query xuất hiện cho phép
bạn soạn thảo câu lệnh T-SQL để tạo thủ
tục. Cú pháp tạo thủ tục nội tại như sau:
CREATE PROCEDURE tên_thủ_tục
[(danh_sách_tham_số)]
[WITH RECOMPILE |ENCRYPTION ]
AS
Các_câu_lệnh_của_thủ_tục
SQL Server 2005

9


5.3 Tạo thủ tục
Ví dụ 1: Viết thủ tục cho biết danh sách
sinh viên của một lớp có mã cho trước
Creste proc DS_Lop @MaLop Varchar
(10)
AS
Select Sinhvien.MaSV,
SinhVien.HoDem, SinhVien.Ten,
SinhVien.NgaySinh
From SinhVien
Where SinhVien.MaLop= @MaLop
Go
SQL Server 2005


10


5.3 Tạo thủ tục
Ví dụ 1: Viết thủ tục nhập vào dữ liệu cho
bảng HOCPHAN
Ví dụ 2: Viết thủ tục thực hiện công việc sau:
•Chèn thêm học phần công nghệ phần mềm
có mã cnpm và số tín chỉ là 3 vào bảng
HOCPHAN
•Lên danh sách nhập điểm thi môn công nghệ
phần mềm cho các sinh viên học lớp có mã dl01
(tức là chèn thêm vào bảng DIEMTHI các bản ghi
với cột MAHOCPHAN nhận giá trị cnpm, cột
MASV nhận giá trị lần lượt là mã các sinh viên
học lớp có mã dl01 và các cột điểm là NULL).
SQL Server 2005

11


5.3 Lời gọi thủ tục
Thực thi thủ tục bằng lời gọi thủ tục có
dạng:
•Tên_thủ_tục [danh_sách_các_đối_số]
Lời gọi thủ tục được thực hiện bên trong
một thủ tục khác, bên trong một trigger hay
kết hợp với các câu lệnh SQL khác, sử dụng
cú pháp :

•EXECUTE|EXEC tên_thủ_tục
[danh_sách_các_đối_số]

SQL Server 2005

12


5.3 Lời gọi thủ tục
Thứ tự của các đối số được truyền cho
thủ tục có thể không cần phải tuân theo thứ
tự của các tham số như khi định nghĩa thủ
tục nếu tất cả các đối số được viết dưới
dạng:
@tên_tham_số = giá_trị

SQL Server 2005

13


5.4 Lời gọi thủ tục
Ví dụ:
•Cách 1:
spLenDanhSachDiem 'cnpm','Công nghệ
phầm mềm',3,'dl01'
•Cách 2:
spLenDanhSachDiem
@malop='dl01',
@tenhocphan='Công nghệ phần mềm',

@mahocphan='cnpm',
@sotinchi=3
SQL Server 2005

14


5.5 Khai báo và sử dụng biến
5.5.1 Khai báo biến
DECLARE @tên_biến kiểu_dữ_liệu
•Tên biến phải bắt đầu bởi ký tự @ và
tuân theo qui tắc về định danh.
•Tất cả các biến sau khi khai báo sẽ có
giá trị khởi tạo là Null.
•Ví dụ:
DECLARE @hodem NVARCHAR(30)

SQL Server 2005

15


5.5.2 Phát biểu Set
•Phát biểu Set dùng để gán giá trị cho
các biến. Cú pháp của phát biểu Set như
sau:
SET <@tên_biến>=<Giá trị>|(biểu SELECT>)
•Bạn có thể sử dụng nhiều phát biểu SET
trên cùng một dòng bằng cách sử dụng dấu

chấm phẩy để phân cách.
Set @Tong=0; Set @dem=0
Set @max=(Select max(diemlan1) from
DIEMTHI where mahocphan='sql')
SQL Server 2005

16


5.5.2 Phát biểu Set
Chú ý:
Nếu sử dụng phát biểu SET với phát biểu
SELECT, bạn bảo đảm phát biểu SELECT
này trả về giá trị đơn. Nếu phát biểu SELECT
trả về nhiều giá trị thì lỗi sẽ phát sinh.

SQL Server 2005

17


5.5.3 Phát biểu Select để gán
giá trị

Một trong những điểm mạnh của phát
biểu Select khi sử dụng để gán giá trị cho
biến là cùng một lúc có thể lấy giá trị từ
CSDL và gán vào nhiều biến.
Ví dụ:


•Select @max=10, @min=0, @tong=0
•Select @max= max(diemlan1),
@min=min(diemlan1) from DIEMTHI where
mahocphan='sql'

SQL Server 2005

18


5.6 Giá trị trả về của tham số trong
thủ tục
•Xét câu lệnh sau đây

CREATE PROCEDURE sp_Conghaiso(@a
INT,@b INT, @c INT)
AS SELECT @c=@a+@b
•Thực thi một tập các câu lệnh như
sau:
DECLARE @tong INT
SELECT @tong=0
EXECUTE sp_Conghaiso 100,200,@tong
SELECT @tong
Kết quả tong=0
SQL Server 2005

19


5.6 Giá trị trả về của tham số trong

thủ tục
•Nếu muốn giữ lại giá trị của đối số
sau khi kết thúc thủ tục, bạn phải khai
báo tham số theo cú pháp như sau:

@tên_tham_số kiểu_dữ_liệu OUTPUT
hoặc:
@tên_tham_số kiểu_dữ_liệu OUT
•Và trong lời gọi thủ tục, sau đối số
được truyền cho thủ tục, bạn cũng phải
chỉ định thêm từ khoá OUTPUT (hoặc
OUT)
SQL Server 2005

20


5.6 Giá trị trả về của tham số trong
thủ tục
Định nghĩa lại thủ tục ở ví dụ trên như
sau:

CREATE PROCEDURE sp_Conghaiso(
@a INT, @b INT, @c INT OUTPUT)
AS
SELECT @c=@a+@b

SQL Server 2005

21



5.6 Giá trị trả về của tham số trong
thủ tục
Thực hiện lời gọi thủ tục trong một
tập các câu lệnh như sau:
DECLARE @tong INT
SELECT @tong=0
EXECUTE sp_Conghaiso 100,200, @tong
OUTPUT
SELECT @tong
Thì câu lệnh “SELECT @tong” sẽ cho kết
quả là: 300
SQL Server 2005

22


5.7 Cấu trúc điều khiển
5.7.1 Cấu trúc If...Else
5.7.2 Cấu trúc While
5.7.3 Phát biểu Continue
5.7.4 Phát biểu Break
5.7.5 Phát biểu Return
5.7.6 Cấu trúc Try...Catch
5.7.7 Cấu trúc Case

SQL Server 2005

23



5.7.1 Cấu trúc If...Else
Cấu trúc như sau :
IF <Biểu thức điều kiện>
<Các câu lệnh>
ELSE
<Các câu lệnh>
Trong Cấu trúc If...Else, nếu có từ hai lệnh
trở lên thì phải đặt giữa hai từ khóa Begin
và End.

SQL Server 2005

24


5.7.1 Cấu trúc If...Else
Ví dụ 1: Viết thủ tục đưa vào một masv.
Nếu sinh viên đó là Nam thì hiện ra câu
thông báo “Chúc anh sức khỏe” ngược lại
nếu sinh viên đó là Nữ hiện ra câu thông
báo “Chúc chị sức khỏe”.
Ví dụ 2: Viết thủ tục yêu cầu đưa vào hai
mã sinh viên và in ra câu ai sinh trước hơn
ai.

SQL Server 2005

25



×