06/04/2021, 14:50

Biến (variable) trong MYSQL Stored Procedure - MySQL nâng cao

T-SQL cũng có thể coi nó như là một ngôn ngữ lập trình nên nó cũng tồn tại các khái niệm kiểu dữ liệu, biến và khai báo biến, các vòng lặp, câu ifelse,... Nhưng chúng ta rất ít sử dụng nó để viết các ứng dụng website. Nhưng bạn cũng không nên bỏ qua phần kiến thức bổ ích này nhé. Trong bài này ...

T-SQL cũng có thể coi nó như là một ngôn ngữ lập trình nên nó cũng tồn tại các khái niệm kiểu dữ liệu, biến và khai báo biến, các vòng lặp, câu ifelse,... Nhưng chúng ta rất ít sử dụng nó để viết các ứng dụng website. Nhưng bạn cũng không nên bỏ qua phần kiến thức bổ ích này nhé.

Trong bài này chúng ta sẽ tìm hiểu biến trong Procedure và cách khai báo, thiết lập giá trị cho biến trong Stored Procedure.

1. Khai báo biến trong MySql Stored Procedure

Để định nghĩa một biến mới ta dùng cú pháp :

DECLARE variable_name datatype(size) DEFAULT default_value

Trong đó:

  • DECLARE: là từ khóa tạo biến
  • variable_name là tên biến
  • datatype(size) là kiểu dữ liệu của biến và kích thước của nó
  • DEFAULT default_value: là gán giá trị mặc định cho biến

Ví dụ:

DECLARE product_title VARCHAR(255) DEFAULT 'No Name';

2. Gán giá trị cho biến trong MySql Stored Procedure

Tạo biến rồi thì phải gán giá trị cho nó chứ đúng không nào? Để gán giá trị cho nó thì chúng ta sử dụng tư khóa SET:

SET variable_name = 'value';

Ví dụ: Định nghĩa biến age và gán giá trị 20 cho nó.

DECLARE age INT(11) DEFAULT 0

SET age = 12

Ví dụ: Gán giá trị thông qua lệnh SELECT

DECLARE total_products INT DEFAULT 0
 
SELECT COUNT(*) INTO total_products
FROM products

Trong ví dụ này thì trước tiên nó sẽ thực hiện câu truy vấn SQL đếm tổng số record và sau đó gán vào biến total_products bằng lệnh (COUNT(*) INTO total_products).

4. Phạm vi hoạt động của biến

Nếu như bạn định nghĩa một biến bên trong phần thân của Procedure (giữa BEGIN và END) thì đó ta gọi là biến cục bộ của Procedure. Bạn có thể định nghĩa nhiều biến trong một Procedure.

Ví dụ:

DELIMITER $$
DROP PROCEDURE IF EXISTS tinhTong $$
CREATE PROCEDURE tinhTong()
BEGIN
	DECLARE a INT (11) DEFAULT 0;
	DECLARE b INT (11) DEFAULT 0;
	DECLARE tong INT (11) DEFAULT 0;
	
	SET a = 200;
	SET b = 300;
	SET tong = a + b;
	
	SELECT tong;
	
END; $$
DELIMITER;

Ở procedure này tôi đã định nghĩa các biến a,b,tong và tính toán trên đó. Bạn chạy câu sql trên và sau đó gọi nó bằng lệnh call tinhTong thì nó sẽ cho kết quả là 500.

Nếu một biến được khai báo bên ngoài Procedure thì bên trong Procedure sẽ không nhận được và sẽ thông báo lỗi.

Ví dụ:

DELIMITER $$
DECLARE tong INT (11) DEFAULT 0;
DROP PROCEDURE IF EXISTS tinhTong $$
CREATE PROCEDURE tinhTong()
BEGIN
	DECLARE a INT (11) DEFAULT 0;
	DECLARE b INT (11) DEFAULT 0;
		
	SET a = 200;
	SET b = 300;
	SET tong = a + b;
	
	SELECT tong;
	
END; $$
DELIMITER;

Chương trình này lỗi vì biến tong không tồn tại trong Procedure.

Lời kết:

Trong bài này chủ yếu chúng ta học cách định nghĩa một biến trong MYSQL như thế nào? Cách gán dữ liệu cho biến và thực thi kết quả câu truy vấn SQL rồi gán vào biến đó. Bài tương đối đơn giản nên rất dễ học, ở bài tiếp theo chúng ta sẽ tìm hiểu cách khai báo tham số truyền vào Procedure nhé.

Bùi Văn Nam

27 chủ đề

7090 bài viết

Cùng chủ đề
0