Procedure Trong SQL Là Gì? Cách Sử Dụng

935 lượt xem

Trong lĩnh vực quản lý cơ sở dữ liệu, việc xử lý và truy xuất thông tin đóng vai trò then chốt. SQL (Structured Query Language), một ngôn ngữ truy vấn cấu trúc, được sử dụng rộng rãi để tương tác với cơ sở dữ liệu. Trong SQL, PROCEDURE là một thành phần quan trọng, cho phép tạo ra các khối mã SQL. PROCEDURE là một đối tượng chứa tập hợp các câu lệnh SQL được lưu trữ trong cơ sở dữ liệu, có khả năng được gọi và thực thi nhiều lần

Procedure Trong SQL Là Gì?

Procedure trong SQL là đối tượng chứa các câu lệnh SQL được lưu trữ trong cơ sở dữ liệu. Nó hoạt động giống như hàm hoặc phương thức trong ngôn ngữ lập trình, nhưng chủ yếu thực thi câu lệnh SQL. Mục đích chính của Procedure là giảm sự lặp lại mã, tăng tính tái sử dụng và dễ bảo trì mã SQL trong hệ thống cơ sở dữ liệu..

Xem thêm bài viết về SQL :

Tìm Hiểu Index Trong SQL

Giới Thiệu Cơ Bản về Trigger trong SQL: Khái Niệm và Ứng Dụng

Procedure trong SQL là gì ?
Procedure trong SQL là gì ?

Mục Đích Của Procedure Trong SQL

Procedure cho phép đóng gói các câu lệnh SQL liên quan vào một đơn vị độc lập, có thể được gọi nhiều lần từ nhiều chương trình hoặc truy vấn khác nhau. Điều này giúp giảm sự lặp lại mã và giữ cho mã SQL dễ bảo trì.

Sử dụng Procedure giúp tập trung các câu lệnh SQL cụ thể vào một nơi duy nhất trong cơ sở dữ liệu. Điều này giúp quản lý và hiểu mã dễ dàng hơn.

Procedure có thể cải thiện hiệu suất của cơ sở dữ liệu bằng cách giảm số lần gửi các câu lệnh SQL lên máy chủ. Thay vào đó, chỉ cần gọi Procedure một lần và thực hiện nhiều tác vụ trên máy chủ.

Cú Pháp Tạo Procedure

Cú pháp

Để tạo một procedure trong SQL Server, ta sử dụng cú pháp như dưới đây:

 CREATE { PROCEDURE | PROC } [schema_name.]procedure_name

[ @parameter [type_schema_name.] datatype

[ VARYING ] [ = default ] [ OUT | OUTPUT | READONLY ]

, @parameter [type_schema_name.] datatype

[ VARYING ] [ = default ] [ OUT | OUTPUT | READONLY ] ]

[ WITH { ENCRYPTION | RECOMPILE | EXECUTE AS Clause } ]

[ FOR REPLICATION ]

AS

BEGIN

[declaration_section]

executable_section

END;

Trong đó:

  • schema_name: Tên schema (lược đồ) sở hữu procedure.
  • procedure_name: Tên gán cho procedure
  • @parameter: Một hay nhiều tham số được truyền vào hàm.
  • type_schema_name: Kiểu dữ liệu của schema (nếu có).
  • Datatype: Kiểu dữ liệu cho @parameter.
  • Default: Giá trị mặc định gán cho @parameter.
  • OUT/OUTPUT: @parameter là một tham số đầu ra
  • READONLY: @parameter không thể bị procedure ghi đè lên.
  • ENCRYPTION: Mã nguồn (source) của procedure sẽ không được lưu trữ dưới dạng text trong hệ thống.
  • RECOMPILE: Truy vấn sẽ không được lưu ở bộ nhớ đệm (cache) cho thủ tục này.
  • EXECUTE AS clause: Xác định ngữ cảnh bảo mật để thực thi thủ tục.
  • FOR REPLICATION: Procedure đã lưu sẽ chỉ được thực thi trong quá trình replication (nhân bản).

Ví dụ

 CREATE PROCEDURE spNhanvien

@nhanvien_name VARCHAR(50) OUT

AS

BEGIN

DECLARE @nhanvien_id INT;

SET @nhanvien_id = 8;

IF @nhanvien_id < 10

SET @nhanvien_name = 'Smith';

ELSE

SET @nhanvien_name = 'Lawrence';

END;

Thủ tục trên được gán tên là spNhanvien, có một tham số là @nhanvien_name, output của tham số sẽ được dựa trên @nhanvien_id.

Sau đó, bạn có thể thực hiện tham chiếu spNhanvien như sau:

USE [test]

GO

DECLARE @site_name varchar(50);

EXEC FindSite @site_name OUT;

PRINT @site_name;

GO

Cú Pháp Xóa Procedure Trong SQL

Một khi đã tạo thành công các procedure thì cũng sẽ có những trường hợp bạn muốn xóa bỏ procedure khỏi cơ sở dữ liệu vì một vài lý do.

Cú Pháp

Để xóa bỏ một procedure, ta có cú pháp sau:

DROP PROCEDURE procedure_name;

Trong đó :

procedure_name: Tên procedure bạn muốn xóa bỏ…

Ví dụ:

DROP PROCEDURE spCustomer;

Thực hiện lệnh này là bạn đã vừa xóa bỏ thủ tục spCustomer khỏi database.

Thủ Tục Lưu Trữ Tạm Thời

Trong quản lý cơ sở dữ liệu, bạn có thể sử dụng thủ tục tạm thời để xử lý các tác vụ trong một phiên làm việc cụ thể. Các thủ tục này được lưu trữ trong cơ sở dữ liệu tempdb và chia thành hai loại chính:

  • Thủ tục lưu trữ tạm thời cục bộ
  • Thủ tục tạm thời cục bộ

Thủ tục tạm thời cục bộ: Để tạo một thủ tục tạm thời cục bộ, bạn sử dụng tiền tố #. Thủ tục này chỉ có thể được truy cập và sử dụng trong phiên làm việc hiện tại. Khi phiên làm việc kết thúc hoặc kết nối được đóng, thủ tục tạm thời này sẽ tự động bị hủy bỏ và không còn tồn tại trong cơ sở dữ liệu.

Ví dụ cách tạo một thủ tục tạm thời nội bộ:

CREATE PROCEDURE #Temp

AS

BEGIN

PRINT 'Local temp procedure'

END

Thủ tục lưu trữ tạm thời toàn cục cho phép bạn tạo ra một thủ tục có thể truy cập từ bất kỳ phiên nào trong cơ sở dữ liệu. Để tạo thủ tục này, bạn sử dụng tiền tố ##. Thủ tục này tồn tại và có thể được sử dụng bởi các phiên khác nhau cho đến khi phiên tạo ra nó đóng lại; lúc đó, thủ tục sẽ tự động bị xóa khỏi cơ sở dữ liệu.

Ví dụ cách tạo thủ tục tạm thời toàn cục:

CREATE PROCEDURE ##TEMP

AS

BEGIN

PRINT 'Global temp procedure'

END

Lợi Ích Khi Dùng Procedure Trong SQL

Tính năng tái sử dụng: PROCEDURE cho phép bạn gom nhóm các lệnh SQL liên quan lại với nhau thành một khối độc lập, có khả năng được triệu hồi lại nhiều lần từ các ứng dụng hoặc truy vấn khác nhau. Điều này giúp giảm bớt sự trùng lặp của code và làm cho việc bảo trì mã SQL trở nên dễ dàng hơn.

Tính năng tập hợp: Thông qua việc sử dụng PROCEDURE, bạn có thể tổ chức các lệnh SQL vào một vị trí duy nhất trong cơ sở dữ liệu, làm cho việc quản lý và hiểu biết về mã trở nên thuận tiện hơn.

Cải thiện hiệu suất: PROCEDURE có thể tăng cường hiệu suất của cơ sở dữ liệu bằng cách giảm thiểu số lần các lệnh SQL cần được gửi đến máy chủ. Bằng cách chỉ gọi PROCEDURE một lần để thực hiện nhiều hoạt động, nó giúp tối ưu hóa quá trình xử lý trên máy chủ.

Tính linh hoạt trong chỉnh sửa: Lập trình viên có thể dễ dàng thay đổi code trong procedure của SQL Server mà không cần phải khởi động lại hoặc triển khai lại toàn bộ ứng dụng. Điều này khác biệt rõ ràng so với việc phải sửa đổi code trực tiếp trong ứng dụng, yêu cầu một quy trình triển khai phức tạp. Sử dụng procedure giúp loại bỏ vấn đề này, cho phép chỉnh sửa logic nghiệp vụ một cách dễ dàng thông qua lệnh Alter Procedure.

Giảm bớt gánh nặng truy cập mạng: Việc sử dụng procedure lưu trữ thay vì các truy vấn T-SQL trực tiếp từ ứng dụng giúp giảm đáng kể lượng dữ liệu cần phải chuyển qua mạng. Thay vì gửi toàn bộ truy vấn T-SQL, chỉ cần gửi tên của procedure, làm giảm băng thông sử dụng và tăng hiệu suất ứng dụng.

Cải thiện bảo mật: Procedure lưu trữ cung cấp một lớp bảo mật thêm bằng cách hạn chế truy cập trực tiếp vào bảng và dữ liệu. Điều này giúp giảm thiểu rủi ro từ các mối đe dọa bảo mật bằng cách kiểm soát chặt chẽ quyền truy cập và các thao tác trên dữ liệu.

Lợi ích khi dùng Procedure trong SQL
Lợi ích khi dùng Procedure trong SQL

Những Hạn Chế Của Procedure SQL Server

  • Khó gỡ lỗi: Gỡ lỗi thủ tục lưu trữ là một nhiệm vụ phức tạp. Do đó, không nên sử dụng thủ tục lưu trữ cho logic nghiệp vụ phức tạp, vì điều này có thể dẫn đến các lỗi không mong muốn do logic không được xử lý chính xác.
  • Phụ thuộc vào DBA: Trong các tổ chức lớn, các DBA và chuyên gia cơ sở dữ liệu thường quản lý các tập dữ liệu lớn. Lập trình viên ứng dụng phải phụ thuộc vào họ để sửa chữa hoặc phát triển các thủ tục lưu trữ mới. Mọi thay đổi, dù nhỏ, cũng cần sự can thiệp của DBA.
  • Chi phí cao: Tạo và bảo trì thủ tục trong SQL Server tốn kém vì cần có DBA chuyên nghiệp để quản lý. Các tổ chức phải chi trả thêm cho các DBA có kỹ năng cao để xử lý thủ tục phức tạp.
  • Giới hạn về nền tảng: Thủ tục lưu trữ viết cho một nền tảng cụ thể không dễ dàng chạy trên nền tảng khác. Ví dụ, thủ tục viết cho Oracle sẽ cần được viết lại hoàn toàn nếu muốn chuyển sang SQL Server.

Các Hỏi Thường Gặp Trong Procedure

Procedure khác gì so với Function trong SQL?

Procedure có thể thực hiện nhiều thao tác và không nhất thiết phải trả về giá trị, trong khi Function luôn trả về một giá trị duy nhất và thường được sử dụng trong các phép tính và truy vấn.

Làm thế nào để chỉnh sửa một Procedure?

ALTER PROCEDURE ProcedureName
AS
BEGIN
-- SQL statements
END;

Procedure có ảnh hưởng đến hiệu suất không?

Procedure có thể cải thiện hiệu suất bằng cách giảm số lần truy vấn cần gửi đến máy chủ và tối ưu hóa quá trình xử lý trên máy chủ.

Làm thế nào để kiểm tra các Procedure hiện có trong cơ sở dữ liệu?
Sử dụng câu lệnh SELECT từ các bảng hệ thống hoặc sử dụng các công cụ quản lý cơ sở dữ liệu có giao diện đồ họa.

Ví dụ:

SELECT * FROM sys.procedures;

Qua bài viết này, Greensql hy vọng bạn đã có cái nhìn tổng quan và hiểu rõ hơn về PROCEDURE trong SQL, từ công dụng, trạng thái đến cách sử dụng và ứng dụng thực tế. Với những kiến thức này, bạn có thể tự tin áp dụng PROCEDURE vào công việc, tối ưu hóa hiệu suất và nâng cao chất lượng quản lý cơ sở dữ liệu của mình.