Đôi khi bạn có thể cần chuyển đầu vào cho thủ tục được lưu trữ trong MySQL. Trong bài viết này, chúng ta sẽ xem xét cách tạo thủ tục lưu trữ MySQL với các tham số và các loại tham số khác nhau được hỗ trợ trong các thủ tục được lưu trữ.
Thủ tục lưu trữ MySQL với các tham số
Dưới đây là các bước để tạo thủ tục được lưu trữ với các tham số. MySQL hỗ trợ 3 loại tham số thủ tục được lưu trữ - IN, OUT và INOUT. Hãy để chúng tôi xem xét từng chi tiết trong số chúng
VÀO - Đây là chế độ mặc định. Trong chế độ này, câu lệnh gọi phải chuyển đối số cho thủ tục được lưu trữ. Ngoài ra, giá trị của thông số kiểu IN được bảo vệ, có nghĩa là ngay cả khi bạn thay đổi giá trị của nó bên trong thủ tục được lưu trữ, nó sẽ vẫn không thay đổi bên ngoài nó.
HẾT - Giá trị của tham số OUT có thể được thay đổi bên trong thủ tục được lưu trữ và giá trị mới của nó sẽ được chuyển trở lại câu lệnh gọi.
GIỚI THIỆU - Trong trường hợp này, câu lệnh gọi có thể truyền một đối số và thủ tục được lưu trữ có thể sửa đổi giá trị này và chuyển nó trở lại câu lệnh gọi.
Đây là cú pháp của thủ tục được lưu trữ với các tham số trong MySQL.
[IN | OUT | INOUT] parameter_name datatype[(length)]
Trong câu lệnh trên, trước tiên chúng ta chỉ định kiểu tham số, sau đó là tên tham số và kiểu cột.
Thủ tục lưu trữ MySQL với các ví dụ về tham số
Hãy cùng chúng tôi xem xét một số ví dụ về thủ tục được lưu trữ với các tham số.
Tham số IN
Đây là truy vấn SQL để tạo quy trình được lưu trữ với tham số IN.
mysql> DELIMITER // mysql> CREATE PROCEDURE get_product( IN prod_id int ) BEGIN SELECT * FROM products WHERE product_id = prod_id; END // mysql> DELIMITER ; mysql> call get_product(1); +------------+--------------+-------+ | product_id | product_name | price | +------------+--------------+-------+ | 1 | iPhone 11 | 400 | +------------+--------------+-------+ mysql> call get_product(); ERROR 1318 (42000): Incorrect number of arguments for PROCEDURE sample.get_product; expected 1, got 0
Ở trên, chúng tôi đã xác định tham số thủ tục được lưu trữ IN prod_id . Khi chúng ta chuyển đối số của nó trong câu lệnh gọi, thủ tục được lưu trữ sẽ trả về kết quả mong đợi. Tuy nhiên, nếu bạn không vượt qua đối số thì đối số đó sẽ xảy ra lỗi.
Phần thưởng đọc:Cách tạo khóa chính tổng hợp trong MySQL
Tham số OUT
Đây là quy trình được lưu trữ được tạo bằng tham số OUT.
mysql> DELIMITER $$ mysql> CREATE PROCEDURE get_count( IN prod_id int, OUT total INT ) BEGIN SELECT COUNT(*) INTO total FROM products WHERE product_id = prod_id; END$$ mysql> DELIMITER ; mysql> call get_count(1,@total); mysql> select @total; +--------+ | @total | +--------+ | 1 | +--------+
Trong thủ tục được lưu trữ ở trên, chúng tôi xác định 2 tham số - một tham số IN cho prod_id và một tham số OUT để lưu trữ kết quả của thủ tục.
Khi chúng tôi chuyển id sản phẩm trong câu lệnh gọi, quy trình được lưu trữ của chúng tôi sẽ tính số hàng khớp với id sản phẩm này và lưu trữ kết quả trong tham số OUT total
Phần thưởng đọc:Cách cắt ngắn bảng trong MySQL
THÔNG SỐ GIỚI THIỆU
Đây là quy trình được lưu trữ được tạo bằng tham số INOUT.
DELIMITER $$ CREATE PROCEDURE counter( INOUT count INT, IN increment INT ) BEGIN SET count = count + increment; END$$ DELIMITER ;
Trong quy trình được lưu trữ ở trên, chúng tôi đã xác định một tham số IN gia số và thông số INOUT count nơi lưu trữ kết quả của thủ tục được lưu trữ. Thủ tục được lưu trữ của chúng tôi về cơ bản thêm gia số để đếm tham số và lưu trữ kết quả dưới dạng count tham số.
mysql> SET @count = 10; mysql> CALL counter(@count,1); mysql> SELECT @count; +--------+ | @count | +--------+ | 11 | +--------+
Hy vọng rằng bây giờ bạn có thể dễ dàng tạo thủ tục được lưu trữ với các tham số trong MySQL.
Phần thưởng đã đọc:CHẾ ĐỘ XEM DROP của MySQL
Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!