Header Ads Widget

Biến trong stored procedure


Khai báo biến

Biến trong stored procedure được sử dụng để lưu trữ kết quả tức thời. Cú pháp khai báo biến:

Mã:
DECLARE variable_name datatype(size) DEFAULT default_value;
Như bạn thấy, ngay sau từ khóa DECLARE là tên biến. Bạn nên tuân theo qui ước đặt tên biến. Tên biến không nên trùng với tên của table hay colume trong database.

Tiếp theo là xác định kiểu dữ liệu của biến, đó là 1 trong những kiểu dữ liệu mà MySQL hỗ trợ sẵn: Int, varchar, datetime...Kế đến là kích cỡ của biến. Khi bạn khai báo 1 biến, nó được tự động khởi tạo giá trị mặc định là null. Bạn có thể thay đổi giá trị mặc định cho biến bằng cách sử dụng phát biểu DEFAULT. Ví dụ, cú pháp khởi tạo 1 biến có tên total_sale với kiểu dữ liệu là int, giá trị mặc định là 0 như sau:

Mã:
DECLARE total_sale INT DEFAULT 0
Có thể dùng 1 từ khóa DECLARE để khai báo 2 hay nhiều biến có cùng kiểu dữ liệu:

Mã:
DECLARE x, y INT DEFAULT 0
2 biến x và y với cùng kiểu dữ liệu int, giá trị mặc định (của cả 2) là 0.

Gán giá trị cho 1 biến

Sau khi khai báo biến, bạn có thể sử dụng chúng. Để gán 1 giá trị cho 1 biến, bạn dung phát biểu SET như sau:

Mã:
 DECLARE total_count INT DEFAULT 0
SET total_count = 10;
Biến total_count lúc này có giá trị là 10.
Ngoài cách dùng phát biểu SET, chúng ta cũng có thể sử dụng SELECT … INTO để gán kết quả của 1 truy vấn cho 1 biến:

Mã:
 DECLARE total_products INT DEFAULT 0
SELECT COUNT(*) INTO total_products
FROM products
Ở ví dụ trên, chúng ta khai báo 1 biến total_product và khởi tạo giá trị ban đầu bằng 0, sau đó sử dụng phát biểu SELECT … INTO để gán giá trị cho biến total_products bằng tổng số sản phầm (products) trong bảng products.

Phạm vi của 1 biến

Mỗi một biến có phạm vi hoạt động của nó. Nếu bạn khai báo biến bên trong 1 stored procedure, biến đó sẽ còn hiệu lực cho đến khi nào gặp từ khóa END của stored procedure. Nếu bạn khai báo biến bên trong block BEGIN/END của stored procedure, biến sẽ hết hiệu lực khi gặp từ khóa END của block BEGIN/END này.

Bạn có thế khai báo 2 hay nhiều biến cùng tên trong các phạm vi (scope) khác nhau, các biến này sẽ có hiệu lực trong phạm vi riêng của chúng. Dĩ nhiên điều này được khuyến cáo là không nên làm.

Một biến với ký tự “@” làm tiền tố được xem là biến thuộc phạm vi session. Nó sẽ tồn tại dến khi nào session còn tồn tại.

Nhận xét