Hé lộ bí mật ít biết về Stored Procedure

20:57 28/12/2023

Với phần 2 sử dụng stored procedure với tham số, người dùng có thêm kiến thức và cách vận hành. Đây là tổng hợp kiến thức từ giảng viên FPT Polytechnic với mong muốn bật mí những tips nhanh – gọn – hiệu quả khi sử dụng. 

PHẦN 2: Sử dụng stored procedure với tham số

Tạo Stored Procedure với tham số truyền vào:

Trong phần này Stored Procedure sẽ thao tác trên csdl với các bảng như sau:

Thủ tục lưu trữ được tạo bởi câu lệnh CREATE PROCEDURE với cú pháp như sau:

CREATE PROCEDURE tên_thủ_tục [(danh_sách_tham_số)] [WITH RECOMPILE|ENCRYPTION|RECOMPILE,ENCRYPTION]

AS

Các_câu_lệnh_của_thủ_tục

Trong đó:

Tên_thủ_tục Tên của thủ tục cần tạo. Tên phải tuân theo qui tắc định danh và không được vượt quá 128 ký tự.
Danh_sách_tham_số Các tham số của thủ tục được khai báo ngay sau tên thủ tục và nếu thủ tục có nhiều tham số thì các khai báo phân cách nhau bởi dấu phẩy. Khai báo của mỗi một tham số tối thiểu phải bao gồm hai phần:

–        Tên tham số được bắt đầu bởi dấu @.

–        kiểu dữ liệu của tham số

RECOMPILE Thông thường, thủ tục sẽ được phân tích, tối ưu và dịch sẵn ở lần gọi đầu tiên. Nếu tuỳ chọn WITH RECOMPILE được chỉ định, thủ tục sẽ được dịch lại mỗi khi được gọi.
ENCRYPTION Thủ tục sẽ được mã hoá nếu tuỳ chọn WITH ENCRYPTION được chỉ định. Nếu thủ tục đã được mã hoá, ta không thể xem được nội dung của thủ tục.
Các_câu_lệnh_của_thủ_tục Tập hợp các câu lệnh sử dụng trong nội dung thủ tục. Các câu lệnh này có thể đặt trong cặp từ khoá BEGIN…END hoặc có thể không.

Giả sử ta cần thực hiện một chuỗi các thao tác như sau trên cơ sở dữ liệu:

  1. Bổ sung thêm môn học “CSDL Nâng Cao” có mã SOA2041 và số giờ học là 36 vào bảng MONHOC.
  2. Nhập điểm thi môn cơ sở dữ liệu cho :

– Cột sinh viên có mã sinh viên là: PH06234,

– Cột mã lớp học lớp có mã lớp PT13302 (tức là bổ sung thêm vào bảng KETQUA 1 bản ghi với cột MAMONHOC nhận giá trị SOA2041, cột MASV nhận giá trị PH06234 và học lớp có mã PT13302)

– Cột lần thi: 1

– và cột điểm là NULL).

Nếu thực hiện yêu cầu trên thông qua các câu lệnh SQL như thông thường, ta phải thực thi 2 câu Insert into lệnh như sau:

INSERT INTO MONHOC VALUES(‘SOA2041’,CSDL Nang Cao’,36)

INSERT INTO KETQUA (Masv, Mamh, Lanthi) VALUES (PH06234, SOA2041, 1)

Thay vì phải sử dụng hai câu lệnh như trên, ta có thể định nghĩa môt thủ tục lưu trữ với các tham số vào là @mamonhoc, @tenmonhoc, @sodvht, @masv và @malop như sau:

CREATE PROC sp_ThemMonHoc(

@mamonhoc     NVARCHAR(10),

@tenmonhoc    NVARCHAR(50),

@sodvht       SMALLINT,

@masv         NVARCHAR(10),

@malop        NVARCHAR(10))

AS

BEGIN

INSERT INTO monhoc

VALUES(@mamonhoc,@tenmonhoc,@sodvht)

INSERT INTO KETQUA(Masv, Mamh, Lanthi)

VALUES(@masv, @mamonhoc,1)

END

 

 

Stored Procedure được ra trong cây thư mục của csdl sql Server:

  1. Thực thi Stored Procedure với các tham số:

2.1. Số lượng các đối số cũng như thứ tự của chúng phải phù hợp với số lượng và thứ tự của các tham số  khi định nghĩa thủ tục.

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

sp_ThemMonHoc’SOA2041′,’CSDL NangCao’,36,’ph06234′,’PT13302′

2.1. 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 khi tất cả các đối số được viết dưới dạng:

@tên_tham_số = giá_trị

Câu lệnh thực thi Stored Procedure với tham số truyền vào ở trên có thể viết như sau:

sp_ThemMonHoc @malop=’PT13302′,

@tenmonhoc=’CSDL NangCao’,

@mamonhoc=’SOA2041′,

@sodvht=36

@masv=’ph06234′

Sau khi gọi Stored Procedure và truyền tham số vào ta có kết quả dữ liệu trong bảng như sau:

Bảng MonHoc:

Bảng KetQua:

Bảng SinhVien:

  1. Sử dụng biến trong thủ tục:

Ngoài những tham số được truyền cho thủ tục, bên trong thủ tục còn có thể sử dụng các biến nhằm lưu giữ các giá trị tính toán được hoặc truy xuất được từ cơ sở dữ liệu. Các biến trong thủ tục được khai báo bằng từ khoá DECLARE theo cú pháp như sau:

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.

Ví dụ minh hoạ việc sử dụng biến trong Stored Procedure:

CREATE OR ALTER PROCEDURE sp_KtraQueQuan(

@masv NVARCHAR(10))

AS

BEGIN

DECLARE @tensv NVARCHAR(30)

DECLARE @QueQuan NVARCHAR(30)

SELECT @tensv=Hoten,

@QueQuan=Quequan

FROM SINHVIEN WHERE Masv=@masv

PRINT @tensv+’ Que Quan ‘+@QueQuan

IF @QueQuan=N’Hà Nội’

PRINT N’Sinh viên sống ở Hà nội’

ELSE

PRINT N’Sinh viên ngoại tỉnh’

END

Trong Procedure trên 2 biến @tensv và QueQuan được tạo ra để lưu trữ kết quả của câu lệnh Select: Hoten và Quequan được lấy ra từ câu lệnh Select sẽ lưu trong trong 2 biến này.

Tiếp theo 2 biến này được sử dụng để in ra thông tin và so sánh trong câu lệnh IF.

Câu lệnh thực thi Stored Procedure với mã sv được truyền vào là: PH06324

sp_KtraQueQuan ‘ph06234’

kết quả chúng ta nhận được như sau:

Giảng viên Hoàng Quốc Việt 

Bộ môn Ứng dụng phần mềm

Trường Cao đẳng FPT Polytechnic cơ sở Hà Nội

Hỗ trợ tư vấn và giải đáp thông tin tuyển sinh FPT Polytechnic

Cùng chuyên mục

Đăng ký nhập học tại FPT Polytechnic 2026

  • Max. file size: 50 MB.
  • Max. file size: 50 MB.
  • Max. file size: 50 MB.