SlideShare a Scribd company logo
1 of 30
Download to read offline
It.Kma
Chương 4: Thủ tục lưu trữ
(Store Procedure) –
Hàm (function)
It.kma
February 13, 2019 2
Thủ tục lưu trữ
1
Hàm
2
It.kma
February 13, 2019 3
Thủ tục lưu trữ
Khái niệm
1
Tạo thủ tục lưu trữ
2
Lời gọi thủ tục lưu trữ
3
Sử dụng biến trong thủ tục lưu trữ
4
Sửa và xóa thủ tục lưu trữ
5
It.kma
February 13, 2019 4
Khái niệm
Một thủ tục lưu trữ là một đối tượng trong cơ sở dữ
liệu bao gồm một tập nhiều câu lệnh SQL được nhóm
lại với nhau tạo thành một nhóm với những khả năng
sau:
 Các cấu trúc điều khiển có thể được dùng trong thủ tục
 Bên trong thủ tục có thể sử dụng các biến.
 Một tập các câu lệnh kết hợp thành một khối lệnh trong thủ
tục.
It.kma
February 13, 2019 5
Tạo thủ tục lưu trữ
 Tạo thủ tục với cú pháp như sau:
CREATE PROCEDURE tên_th _t c
ủ ụ
[(danh sách tham s )]
ố
[WITH RECOMPILE|ENCRYPTION|
RECOMPILE,ENCRIPTION]
AS
Các_câu_l nh_c a_th _t c
ệ ủ ủ ụ
It.kma
February 13, 2019 6
Tạo thủ tục lưu trữ (tiếp)
Tên thủ tục: tuân theo quy tắc định danh và
không vượt quá 128 ký tự.
Danh sách tham số: khai báo ngay sau tên thủ
tục. Tham số tối thiểu phải có 2 phần:
 Tên tham số bắt đầu bởi chứ @
 Kiểu dữ liệu của tham số
Recompile: Thủ tục được dịch lại mỗi khi gọi
Encryption: thủ tục được mã hóa, không thể
xem được nội dụng thủ tục
Câu lệnh: thường được đặt trong từ khóa
BEGIN..END.
It.kma
February 13, 2019 7
Tạo thủ tục lưu trữ (tiếp)
Tạo một thủ tục cho biết thông tin sinh viên theo
lớp.
Create procedure sp_thongtinsinhvien
(@lop nvarchar(10))
as
select Masv, tensv, gioitinh, que,
ngaysinh, lop
from sinhvien
where lop = @lop
It.kma
February 13, 2019 8
Tạo thủ tục lưu trữ (tiếp)
Kết quả: sp_thongtinsinhvien1 L01
It.kma
February 13, 2019 9
Tạo thủ tục lưu trữ (tiếp)
Chèn dữ liệu vào 2 bảng sinhvien và monhoc
 create proc them_sinhvien_monhoc
(@tensv nvarchar(50),@Ngaysinh date, @que nvarchar(50), @Lop
nvarchar(10),@tenmh nvarchar(50),@DVHT int)
as
insert into Sinhvien (TenSV, Ngaysinh, Que, Lop)
values (@tensv, @Ngaysinh, @que, @Lop)
INSERT INTO Monhoc (TenMH, DVHT)
VALUES (@tenmh, @DVHT)
It.kma
February 13, 2019 10
Lời gọi thủ tục
Thực thi lời gọi thủ tục có dạng
Tên_thủ_tục [danh_sách_tham_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 trigger hay với các câu lệnh SQL
khác ta thực thi như sau:
execute tên_thủ_tục [danh_sách_các_đối_số]
Thứ tự các đối số có thẻ không cần tuân theo thứ tự
của các tham số như khi định nghĩa
@tên_tham_số = giá_trị
It.kma
February 13, 2019 11
Sử dụng các biến nhằm lưu giá trị tính toán được
hoặc truy xuất được từ cơ sở dữ liệu.
Khai báo biến bằng từ khóa DECLARE
DECLARE TÊN_BI N
Ế KI U_D _LI U
Ể Ữ Ệ
Sử dụng biến trong thủ tục
It.kma
February 13, 2019 12
 /*kiểm tra 2 bạn sinhvien có cùng năm sinh hay không*/
create procedure kiemtra_thongtinsv
@masv1 int,
@masv2 int
AS
declare @namsinh1 int, @namsinh2 int
select @namsinh1 = year(Ngaysinh) from Sinhvien where MaSV =
@masv1
select @namsinh2 = year(Ngaysinh) from Sinhvien where MaSV =
@masv2
if @namsinh1 <>@namsinh2
print 'hai b n sinh viên mã'
ạ + str(@masv1)+' và '+str(@masv2)+'
không cùng năm sinh'
else
print 'hai b n sinh viên mã'
ạ + str(@masv1)+' và '+str(@masv2)+'
cùng năm sinh'
Sử dụng biến trong thủ tục (tiếp)
It.kma
February 13, 2019 13
NHANVIEN(MaNV, HoTen, NgaySinh, Luong, …., MaPB)
CREATE PROC DSNV_Luong_Max
As
Begin
declare @maxLuong float
set @maxLuong = Select max(Luong)
From NHANVIEN
select MaNV, HoTen, NgaySinh
from NHANVIEN
where Luong = @maxLuong
End
*Thủ tục cho DS Lương cao nhất
13
It.kma
February 13, 2019 14
Ví dụ
NHANVIEN(MaNV, Hoten, DiaChi, SDT, NgaySinh, GT, HSL)
HANG(MaHang, TenHang, NhaSX, TGianBaoHanh)
KHACHHANG(MaKH, TenKH, CMT, DiaChi, SoDienThoai, Email)
HOADONXUAT(MaHD, MaKH, NgayLapHD, MaNV,
PhuongThucTT)
CT_HOADON(MaHD, MaHang, SoLuongMua, DonGia)
 Tạo Proc tính tổng tiền đã mua hàng của một khách hàng nào đó
theo mã KH
 Tạo Proc cho biết tổng số tiền hàng đã mua của một hóa đơn nào đó
 Tạo Pro cho biết tổng số tiền hàng đã bán của một tháng nào đó
 Tạo Proc cho biết họ tên của nhân viên có tuổi cao nhất
14
It.kma
February 13, 2019 15
Khi một thủ tục được tạo ra, ta có thể tiến hành định
nghĩa lại thủ tục đó bằng câu lệnh có cú pháp sau:
ALTER PROCEDURE tên_th _t c
ủ ụ
[(danh sách tham s )]
ố
[WITH RECOMPILE|ENCRYPTION|
RECOMPILE,ENCRIPTION]
AS
Các_câu_l nh_c a_th _t c
ệ ủ ủ ụ
Sửa thủ tục
It.kma
February 13, 2019 16
Để xóa một thủ tục đã có ta sử dụng câu lệnh có cú
pháp sau:
DROP PROCEDURE TÊN_TH _T C
Ủ Ụ
Xóa thủ tục
It.kma
February 13, 2019 17
Lợi ích khi sử dụng thủ tục
Đơn giản hóa các thao tác trên CSDL nhờ khả năng
module hóa.
Thủ tục được phân tích, tối ưu khi tạo ra nên thực thi
chúng nhanh hơn so với việc thực hiện tập hợp rời rác
các câu lệnh.
Cho phép ta thực hiện cùng một yêu cầu bằng một
câu lệnh đơn giản thay vì sử dụng nhiều dòng lệnh
SQL => Làm giảm thiểu nhiều sự lưu thông trên
mạng.
Cấp phát quyền thông qua thủ tục làm tang khả năng
bảo mật với hệ thống.
It.kma
February 13, 2019 18
Hàm - Function
Khái niệm và sử dụng hàm
1
Hàm với giá trị trả về là kiểu bảng
2
It.kma
February 13, 2019 19
Hàm là đối tượng trong cơ sở dữ liệu
Hàm trả về một giá trị thông qua tên hàm
Có thể sử dụng hàm như là một thành phần của biểu
thức.
Khái niệm hàm
It.kma
February 13, 2019 20
Cú pháp tạo một hàm:
CREATE FUNCTION tên_hàm
([danh_sách_tham_s ]
ố )
RETURNS (ki u_tr _v _c a_hàm
ể ả ề ủ )
AS
BEGIN
các_câu_l nh_c a_hàm
ệ ủ
END
Sử dụng hàm
It.kma
February 13, 2019 21
Ví dụ: Định nghĩa hàm tính ngày trong tuần của một
giá trị kiểu ngày
CREATE FUNCTION thu(@ngay DATETIME)
RETURNS NVARCHAR(10)
AS
BEGIN
DECLARE @st NVARCHAR(10)
SELECT @st=CASE DATEPART(DW,@ngay)
WHEN 1 THEN N’Ch nh t'
ủ ậ
WHEN 2 THEN N'Th hai'
ứ
WHEN 3 THEN N'Th ba'
ứ
WHEN 4 THEN N'Th t '
ứ ư
WHEN 5 THEN N'Th năm'
ứ
WHEN 6 THEN N'Th sáu'
ứ
ELSE N'Th b y'
ứ ả
END
RETURN (@st) /* Tr tr v c a hàm */
ị ả ề ủ
END
Sử dụng hàm (tiếp)
It.kma
February 13, 2019 22
Sau đó ta có thể sử dụng hàm trong câu truy vấn
select masv, TenSV, Ngaysinh, dbo.thu(ngaysinh) as 'Ngày trong tu n'
ầ
from sinhvien
Sử dụng hàm (tiếp)
It.kma
February 13, 2019 23
Hàm cũng có thể trả về giá trị là bảng nhằm tăng thêm
tính linh hoạt của khung nhìn.
Hàm nội tuyến
CREATE FUNCTION tên_hàm
([danh_sách_tham_s ]
ố )
RETURNS TABLE
AS
RETURN (câu_l nh_select
ệ )
 Kiểu trả về phải được chỉ định bởi mệnh đề Returns table
 Phần thân chỉ có duy nhất 1 câu lệnh RETURN.
Hàm với giá trị trả về là kiểu bảng
It.kma
February 13, 2019 24
Ví dụ: Viết một hàm hiển thị điểm của sinh viên theo
lớp.
create function diem_lop
(@lop nvarchar(10)
)
returns table
as
return
(
select Sinhvien.MaSV, TenSV, Lop, TenMH, Diem
from Sinhvien, Monhoc, Ketqua
where sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH
and Lop = @lop
)
Hàm với giá trị trả về là kiểu bảng
It.kma
February 13, 2019 25
Sau khi khởi tạo hàm ta có thể thực thi hàm:
select * from dbo.diem_lop('L03')
Hàm với giá trị trả về là kiểu bảng
It.kma
February 13, 2019 26
 Trong trường hợp cần sử dụng nhiều câu lệnh trong phần thân
hàm, ta sử dụng cú pháp sau:
CREATE FUNCTION tên_hàm([danh_sách_tham_s ]
ố )
RETURNS @bi n_b ng
ế ả TABLE đ nh_nghĩa_b ng
ị ả
AS
BEGIN
các_câu_l nh_trong_thân_hàm
ệ
RETURN
END
Hàm với giá trị trả về là kiểu bảng (tiếp)
It.kma
February 13, 2019 27
 Ví dụ: Viết một hàm cho biết tổng số sinh viên của mỗi lớp đã
thi môn học được nhập vào.
create function func_tongsv
(@mamon int)
returns @bangthongke table
(
lop nvarchar(10),
tongsosv int
)
as
BEGIN
insert into @bangthongke
select lop, count(sinhvien.masv)
from ((Sinhvien join Ketqua on Sinhvien.MaSV = Ketqua.MaSV)
join Monhoc on Monhoc.MaMH = Ketqua.MaMH)
where Monhoc.MaMH = @mamon
group by Lop
return
END
Hàm với giá trị trả về là kiểu bảng (tiếp)
It.kma
February 13, 2019 28
 select * from dbo.func_tongsv(1)
Hàm với giá trị trả về là kiểu bảng (tiếp)
It.kma
February 13, 2019 29
 S a hàm:
ử
ALTER FUNCTION tên_hàm ([danh_sách_tham_s ]
ố )
RETURNS (ki u_tr _v _c a_hàm
ể ả ề ủ )
AS
BEGIN
các_câu_l nh_c a_hàm
ệ ủ
END
 Xóa hàm:
DROP FUNCTION tên_hàm
Sửa và xóa hàm
It.kma
February 13, 2019 30
Câu 1: Vi t m t th t c đ a ra các sinh viên có
ế ộ ủ ụ ư
năm sinh b ng v i năm sinh đ c nh p vào (l y
ằ ớ ượ ậ ấ
năm sinh b ng hàm datepart(yyyy,ngaysinh))
ằ
Câu 2: So sánh 2 sinh viên có mã đ c nh p vào
ượ ậ
xem sinh viên nào đ c sinh tr c.
ượ ướ
Câu 3:Vi t m t hàm đ a ra tháng sinh. Áp d ng
ế ộ ư ụ
đ đ a ra tháng sinh các b n sinh viên đã thi
ể ư ạ
môn có mã là 1.
Câu hỏi

More Related Content

Similar to b6-190213084710.pdf

b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfQuyVo27
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3pisu412
 
K33103350 tran doankimnhu_bai17_tin11
K33103350 tran doankimnhu_bai17_tin11K33103350 tran doankimnhu_bai17_tin11
K33103350 tran doankimnhu_bai17_tin11Tin5VungTau
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Nhat Linh Luong
 
Mapreduce simplified-data-processing
Mapreduce simplified-data-processingMapreduce simplified-data-processing
Mapreduce simplified-data-processingViet-Trung TRAN
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Vu Tuan
 
Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4 Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4 Kieu Tuyen
 
Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4 Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4 Kieu Tuyen
 
Tiểu luận cơ sở ngành kỹ thuật phần mềm. phần mềm mô phỏng các thuật toán s...
Tiểu luận  cơ sở ngành kỹ thuật phần mềm. phần mềm  mô phỏng các thuật toán s...Tiểu luận  cơ sở ngành kỹ thuật phần mềm. phần mềm  mô phỏng các thuật toán s...
Tiểu luận cơ sở ngành kỹ thuật phần mềm. phần mềm mô phỏng các thuật toán s...jackjohn45
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Kuli An
 
Composite pattern
Composite patternComposite pattern
Composite patternmentallog
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o soshjdunglv
 

Similar to b6-190213084710.pdf (20)

Tip oracle
Tip oracleTip oracle
Tip oracle
 
Ctdl lab01
Ctdl lab01Ctdl lab01
Ctdl lab01
 
slide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).pptslide_Chuong 3_ (1).ppt
slide_Chuong 3_ (1).ppt
 
Chapter 3
Chapter 3Chapter 3
Chapter 3
 
b34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdfb34-dml-sql-190213084703.pdf
b34-dml-sql-190213084703.pdf
 
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
Slide Hệ Quản Trị Cơ sở dữ liệu - CHƯƠNG 3
 
Access vba 052009
Access vba 052009Access vba 052009
Access vba 052009
 
K33103350 tran doankimnhu_bai17_tin11
K33103350 tran doankimnhu_bai17_tin11K33103350 tran doankimnhu_bai17_tin11
K33103350 tran doankimnhu_bai17_tin11
 
Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010Tai lieu huong_dan_tu_hoc_visual_studio2010
Tai lieu huong_dan_tu_hoc_visual_studio2010
 
Mapreduce simplified-data-processing
Mapreduce simplified-data-processingMapreduce simplified-data-processing
Mapreduce simplified-data-processing
 
matlab co ban
matlab co banmatlab co ban
matlab co ban
 
Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731Lap trinh matlab_co_ban_1731
Lap trinh matlab_co_ban_1731
 
Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4 Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4
 
Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4 Kich ban day hoc tin hoc 7 bai 4
Kich ban day hoc tin hoc 7 bai 4
 
Xac dinh giao dich cua uc
Xac dinh giao dich cua ucXac dinh giao dich cua uc
Xac dinh giao dich cua uc
 
Tiểu luận cơ sở ngành kỹ thuật phần mềm. phần mềm mô phỏng các thuật toán s...
Tiểu luận  cơ sở ngành kỹ thuật phần mềm. phần mềm  mô phỏng các thuật toán s...Tiểu luận  cơ sở ngành kỹ thuật phần mềm. phần mềm  mô phỏng các thuật toán s...
Tiểu luận cơ sở ngành kỹ thuật phần mềm. phần mềm mô phỏng các thuật toán s...
 
Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#Chuan viet code va thiet ke giao dien trong C#
Chuan viet code va thiet ke giao dien trong C#
 
Chuong 05 mang, con tro, tham chieu
Chuong 05 mang, con tro, tham chieuChuong 05 mang, con tro, tham chieu
Chuong 05 mang, con tro, tham chieu
 
Composite pattern
Composite patternComposite pattern
Composite pattern
 
Huong dan 8 o so
Huong dan 8 o soHuong dan 8 o so
Huong dan 8 o so
 

More from QuyVo27

PHP-Basic
PHP-BasicPHP-Basic
PHP-BasicQuyVo27
 
Tong quan benh xuong khop
Tong quan benh xuong khopTong quan benh xuong khop
Tong quan benh xuong khopQuyVo27
 
Medical image procesing
Medical image procesingMedical image procesing
Medical image procesingQuyVo27
 
b5-viewproc-190213084706.pdf
b5-viewproc-190213084706.pdfb5-viewproc-190213084706.pdf
b5-viewproc-190213084706.pdfQuyVo27
 
b2-ddl-create-190213085738.pdf
b2-ddl-create-190213085738.pdfb2-ddl-create-190213085738.pdf
b2-ddl-create-190213085738.pdfQuyVo27
 
b2-ddl-create-190213084659.pdf
b2-ddl-create-190213084659.pdfb2-ddl-create-190213084659.pdf
b2-ddl-create-190213084659.pdfQuyVo27
 
b1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdfb1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdfQuyVo27
 
SQL Server 2014 – Features Drilldown.pptx
SQL Server 2014 – Features Drilldown.pptxSQL Server 2014 – Features Drilldown.pptx
SQL Server 2014 – Features Drilldown.pptxQuyVo27
 
SQL Server 2019 Modern Data Platform.pptx
SQL Server 2019 Modern Data Platform.pptxSQL Server 2019 Modern Data Platform.pptx
SQL Server 2019 Modern Data Platform.pptxQuyVo27
 
SQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptxSQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptxQuyVo27
 
SQL Server 2016 - Always On.pptx
SQL Server 2016 - Always On.pptxSQL Server 2016 - Always On.pptx
SQL Server 2016 - Always On.pptxQuyVo27
 
Querying_with_T-SQL_-_01.pptx
Querying_with_T-SQL_-_01.pptxQuerying_with_T-SQL_-_01.pptx
Querying_with_T-SQL_-_01.pptxQuyVo27
 
MS SQL Server.ppt
MS SQL Server.pptMS SQL Server.ppt
MS SQL Server.pptQuyVo27
 

More from QuyVo27 (13)

PHP-Basic
PHP-BasicPHP-Basic
PHP-Basic
 
Tong quan benh xuong khop
Tong quan benh xuong khopTong quan benh xuong khop
Tong quan benh xuong khop
 
Medical image procesing
Medical image procesingMedical image procesing
Medical image procesing
 
b5-viewproc-190213084706.pdf
b5-viewproc-190213084706.pdfb5-viewproc-190213084706.pdf
b5-viewproc-190213084706.pdf
 
b2-ddl-create-190213085738.pdf
b2-ddl-create-190213085738.pdfb2-ddl-create-190213085738.pdf
b2-ddl-create-190213085738.pdf
 
b2-ddl-create-190213084659.pdf
b2-ddl-create-190213084659.pdfb2-ddl-create-190213084659.pdf
b2-ddl-create-190213084659.pdf
 
b1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdfb1-gioithieu-190213084421.pdf
b1-gioithieu-190213084421.pdf
 
SQL Server 2014 – Features Drilldown.pptx
SQL Server 2014 – Features Drilldown.pptxSQL Server 2014 – Features Drilldown.pptx
SQL Server 2014 – Features Drilldown.pptx
 
SQL Server 2019 Modern Data Platform.pptx
SQL Server 2019 Modern Data Platform.pptxSQL Server 2019 Modern Data Platform.pptx
SQL Server 2019 Modern Data Platform.pptx
 
SQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptxSQL_SERVER_BASIC_1_Training.pptx
SQL_SERVER_BASIC_1_Training.pptx
 
SQL Server 2016 - Always On.pptx
SQL Server 2016 - Always On.pptxSQL Server 2016 - Always On.pptx
SQL Server 2016 - Always On.pptx
 
Querying_with_T-SQL_-_01.pptx
Querying_with_T-SQL_-_01.pptxQuerying_with_T-SQL_-_01.pptx
Querying_with_T-SQL_-_01.pptx
 
MS SQL Server.ppt
MS SQL Server.pptMS SQL Server.ppt
MS SQL Server.ppt
 

b6-190213084710.pdf

  • 1. It.Kma Chương 4: Thủ tục lưu trữ (Store Procedure) – Hàm (function)
  • 2. It.kma February 13, 2019 2 Thủ tục lưu trữ 1 Hàm 2
  • 3. It.kma February 13, 2019 3 Thủ tục lưu trữ Khái niệm 1 Tạo thủ tục lưu trữ 2 Lời gọi thủ tục lưu trữ 3 Sử dụng biến trong thủ tục lưu trữ 4 Sửa và xóa thủ tục lưu trữ 5
  • 4. It.kma February 13, 2019 4 Khái niệm Một thủ tục lưu trữ là một đối tượng trong cơ sở dữ liệu bao gồm một tập nhiều câu lệnh SQL được nhóm lại với nhau tạo thành một nhóm với những khả năng sau:  Các cấu trúc điều khiển có thể được dùng trong thủ tục  Bên trong thủ tục có thể sử dụng các biến.  Một tập các câu lệnh kết hợp thành một khối lệnh trong thủ tục.
  • 5. It.kma February 13, 2019 5 Tạo thủ tục lưu trữ  Tạo thủ tục với cú pháp như sau: CREATE PROCEDURE tên_th _t c ủ ụ [(danh sách tham s )] ố [WITH RECOMPILE|ENCRYPTION| RECOMPILE,ENCRIPTION] AS Các_câu_l nh_c a_th _t c ệ ủ ủ ụ
  • 6. It.kma February 13, 2019 6 Tạo thủ tục lưu trữ (tiếp) Tên thủ tục: tuân theo quy tắc định danh và không vượt quá 128 ký tự. Danh sách tham số: khai báo ngay sau tên thủ tục. Tham số tối thiểu phải có 2 phần:  Tên tham số bắt đầu bởi chứ @  Kiểu dữ liệu của tham số Recompile: Thủ tục được dịch lại mỗi khi gọi Encryption: thủ tục được mã hóa, không thể xem được nội dụng thủ tục Câu lệnh: thường được đặt trong từ khóa BEGIN..END.
  • 7. It.kma February 13, 2019 7 Tạo thủ tục lưu trữ (tiếp) Tạo một thủ tục cho biết thông tin sinh viên theo lớp. Create procedure sp_thongtinsinhvien (@lop nvarchar(10)) as select Masv, tensv, gioitinh, que, ngaysinh, lop from sinhvien where lop = @lop
  • 8. It.kma February 13, 2019 8 Tạo thủ tục lưu trữ (tiếp) Kết quả: sp_thongtinsinhvien1 L01
  • 9. It.kma February 13, 2019 9 Tạo thủ tục lưu trữ (tiếp) Chèn dữ liệu vào 2 bảng sinhvien và monhoc  create proc them_sinhvien_monhoc (@tensv nvarchar(50),@Ngaysinh date, @que nvarchar(50), @Lop nvarchar(10),@tenmh nvarchar(50),@DVHT int) as insert into Sinhvien (TenSV, Ngaysinh, Que, Lop) values (@tensv, @Ngaysinh, @que, @Lop) INSERT INTO Monhoc (TenMH, DVHT) VALUES (@tenmh, @DVHT)
  • 10. It.kma February 13, 2019 10 Lời gọi thủ tục Thực thi lời gọi thủ tục có dạng Tên_thủ_tục [danh_sách_tham_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 trigger hay với các câu lệnh SQL khác ta thực thi như sau: execute tên_thủ_tục [danh_sách_các_đối_số] Thứ tự các đối số có thẻ không cần tuân theo thứ tự của các tham số như khi định nghĩa @tên_tham_số = giá_trị
  • 11. It.kma February 13, 2019 11 Sử dụng các biến nhằm lưu giá trị tính toán được hoặc truy xuất được từ cơ sở dữ liệu. Khai báo biến bằng từ khóa DECLARE DECLARE TÊN_BI N Ế KI U_D _LI U Ể Ữ Ệ Sử dụng biến trong thủ tục
  • 12. It.kma February 13, 2019 12  /*kiểm tra 2 bạn sinhvien có cùng năm sinh hay không*/ create procedure kiemtra_thongtinsv @masv1 int, @masv2 int AS declare @namsinh1 int, @namsinh2 int select @namsinh1 = year(Ngaysinh) from Sinhvien where MaSV = @masv1 select @namsinh2 = year(Ngaysinh) from Sinhvien where MaSV = @masv2 if @namsinh1 <>@namsinh2 print 'hai b n sinh viên mã' ạ + str(@masv1)+' và '+str(@masv2)+' không cùng năm sinh' else print 'hai b n sinh viên mã' ạ + str(@masv1)+' và '+str(@masv2)+' cùng năm sinh' Sử dụng biến trong thủ tục (tiếp)
  • 13. It.kma February 13, 2019 13 NHANVIEN(MaNV, HoTen, NgaySinh, Luong, …., MaPB) CREATE PROC DSNV_Luong_Max As Begin declare @maxLuong float set @maxLuong = Select max(Luong) From NHANVIEN select MaNV, HoTen, NgaySinh from NHANVIEN where Luong = @maxLuong End *Thủ tục cho DS Lương cao nhất 13
  • 14. It.kma February 13, 2019 14 Ví dụ NHANVIEN(MaNV, Hoten, DiaChi, SDT, NgaySinh, GT, HSL) HANG(MaHang, TenHang, NhaSX, TGianBaoHanh) KHACHHANG(MaKH, TenKH, CMT, DiaChi, SoDienThoai, Email) HOADONXUAT(MaHD, MaKH, NgayLapHD, MaNV, PhuongThucTT) CT_HOADON(MaHD, MaHang, SoLuongMua, DonGia)  Tạo Proc tính tổng tiền đã mua hàng của một khách hàng nào đó theo mã KH  Tạo Proc cho biết tổng số tiền hàng đã mua của một hóa đơn nào đó  Tạo Pro cho biết tổng số tiền hàng đã bán của một tháng nào đó  Tạo Proc cho biết họ tên của nhân viên có tuổi cao nhất 14
  • 15. It.kma February 13, 2019 15 Khi một thủ tục được tạo ra, ta có thể tiến hành định nghĩa lại thủ tục đó bằng câu lệnh có cú pháp sau: ALTER PROCEDURE tên_th _t c ủ ụ [(danh sách tham s )] ố [WITH RECOMPILE|ENCRYPTION| RECOMPILE,ENCRIPTION] AS Các_câu_l nh_c a_th _t c ệ ủ ủ ụ Sửa thủ tục
  • 16. It.kma February 13, 2019 16 Để xóa một thủ tục đã có ta sử dụng câu lệnh có cú pháp sau: DROP PROCEDURE TÊN_TH _T C Ủ Ụ Xóa thủ tục
  • 17. It.kma February 13, 2019 17 Lợi ích khi sử dụng thủ tục Đơn giản hóa các thao tác trên CSDL nhờ khả năng module hóa. Thủ tục được phân tích, tối ưu khi tạo ra nên thực thi chúng nhanh hơn so với việc thực hiện tập hợp rời rác các câu lệnh. Cho phép ta thực hiện cùng một yêu cầu bằng một câu lệnh đơn giản thay vì sử dụng nhiều dòng lệnh SQL => Làm giảm thiểu nhiều sự lưu thông trên mạng. Cấp phát quyền thông qua thủ tục làm tang khả năng bảo mật với hệ thống.
  • 18. It.kma February 13, 2019 18 Hàm - Function Khái niệm và sử dụng hàm 1 Hàm với giá trị trả về là kiểu bảng 2
  • 19. It.kma February 13, 2019 19 Hàm là đối tượng trong cơ sở dữ liệu Hàm trả về một giá trị thông qua tên hàm Có thể sử dụng hàm như là một thành phần của biểu thức. Khái niệm hàm
  • 20. It.kma February 13, 2019 20 Cú pháp tạo một hàm: CREATE FUNCTION tên_hàm ([danh_sách_tham_s ] ố ) RETURNS (ki u_tr _v _c a_hàm ể ả ề ủ ) AS BEGIN các_câu_l nh_c a_hàm ệ ủ END Sử dụng hàm
  • 21. It.kma February 13, 2019 21 Ví dụ: Định nghĩa hàm tính ngày trong tuần của một giá trị kiểu ngày CREATE FUNCTION thu(@ngay DATETIME) RETURNS NVARCHAR(10) AS BEGIN DECLARE @st NVARCHAR(10) SELECT @st=CASE DATEPART(DW,@ngay) WHEN 1 THEN N’Ch nh t' ủ ậ WHEN 2 THEN N'Th hai' ứ WHEN 3 THEN N'Th ba' ứ WHEN 4 THEN N'Th t ' ứ ư WHEN 5 THEN N'Th năm' ứ WHEN 6 THEN N'Th sáu' ứ ELSE N'Th b y' ứ ả END RETURN (@st) /* Tr tr v c a hàm */ ị ả ề ủ END Sử dụng hàm (tiếp)
  • 22. It.kma February 13, 2019 22 Sau đó ta có thể sử dụng hàm trong câu truy vấn select masv, TenSV, Ngaysinh, dbo.thu(ngaysinh) as 'Ngày trong tu n' ầ from sinhvien Sử dụng hàm (tiếp)
  • 23. It.kma February 13, 2019 23 Hàm cũng có thể trả về giá trị là bảng nhằm tăng thêm tính linh hoạt của khung nhìn. Hàm nội tuyến CREATE FUNCTION tên_hàm ([danh_sách_tham_s ] ố ) RETURNS TABLE AS RETURN (câu_l nh_select ệ )  Kiểu trả về phải được chỉ định bởi mệnh đề Returns table  Phần thân chỉ có duy nhất 1 câu lệnh RETURN. Hàm với giá trị trả về là kiểu bảng
  • 24. It.kma February 13, 2019 24 Ví dụ: Viết một hàm hiển thị điểm của sinh viên theo lớp. create function diem_lop (@lop nvarchar(10) ) returns table as return ( select Sinhvien.MaSV, TenSV, Lop, TenMH, Diem from Sinhvien, Monhoc, Ketqua where sinhvien.MaSV = Ketqua.MaSV and Ketqua.MaMH = Monhoc.MaMH and Lop = @lop ) Hàm với giá trị trả về là kiểu bảng
  • 25. It.kma February 13, 2019 25 Sau khi khởi tạo hàm ta có thể thực thi hàm: select * from dbo.diem_lop('L03') Hàm với giá trị trả về là kiểu bảng
  • 26. It.kma February 13, 2019 26  Trong trường hợp cần sử dụng nhiều câu lệnh trong phần thân hàm, ta sử dụng cú pháp sau: CREATE FUNCTION tên_hàm([danh_sách_tham_s ] ố ) RETURNS @bi n_b ng ế ả TABLE đ nh_nghĩa_b ng ị ả AS BEGIN các_câu_l nh_trong_thân_hàm ệ RETURN END Hàm với giá trị trả về là kiểu bảng (tiếp)
  • 27. It.kma February 13, 2019 27  Ví dụ: Viết một hàm cho biết tổng số sinh viên của mỗi lớp đã thi môn học được nhập vào. create function func_tongsv (@mamon int) returns @bangthongke table ( lop nvarchar(10), tongsosv int ) as BEGIN insert into @bangthongke select lop, count(sinhvien.masv) from ((Sinhvien join Ketqua on Sinhvien.MaSV = Ketqua.MaSV) join Monhoc on Monhoc.MaMH = Ketqua.MaMH) where Monhoc.MaMH = @mamon group by Lop return END Hàm với giá trị trả về là kiểu bảng (tiếp)
  • 28. It.kma February 13, 2019 28  select * from dbo.func_tongsv(1) Hàm với giá trị trả về là kiểu bảng (tiếp)
  • 29. It.kma February 13, 2019 29  S a hàm: ử ALTER FUNCTION tên_hàm ([danh_sách_tham_s ] ố ) RETURNS (ki u_tr _v _c a_hàm ể ả ề ủ ) AS BEGIN các_câu_l nh_c a_hàm ệ ủ END  Xóa hàm: DROP FUNCTION tên_hàm Sửa và xóa hàm
  • 30. It.kma February 13, 2019 30 Câu 1: Vi t m t th t c đ a ra các sinh viên có ế ộ ủ ụ ư năm sinh b ng v i năm sinh đ c nh p vào (l y ằ ớ ượ ậ ấ năm sinh b ng hàm datepart(yyyy,ngaysinh)) ằ Câu 2: So sánh 2 sinh viên có mã đ c nh p vào ượ ậ xem sinh viên nào đ c sinh tr c. ượ ướ Câu 3:Vi t m t hàm đ a ra tháng sinh. Áp d ng ế ộ ư ụ đ đ a ra tháng sinh các b n sinh viên đã thi ể ư ạ môn có mã là 1. Câu hỏi