Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu cách tạo thủ tục lưu trữ với các tham số, bao gồm các tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1, DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2 và DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 3Giới thiệu về tham số thủ tục lưu trữ MySQLThông thường, các thủ tục được lưu trữ có các tham số. Các tham số làm cho thủ tục được lưu trữ hữu ích hơn và có thể tái sử dụng. Một tham số trong một thủ tục được lưu trữ có một trong ba chế độ. DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 4, hoặc DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ;Code language: SQL (Structured Query Language) (sql)1 thông sốDELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 là chế độ mặc định. Khi bạn xác định một tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 trong một thủ tục được lưu trữ, chương trình gọi phải truyền một đối số cho thủ tục được lưu trữNgoài ra, giá trị của tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 được bảo vệ. Điều đó có nghĩa là ngay cả khi bạn thay đổi giá trị của tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 bên trong thủ tục được lưu trữ, thì giá trị ban đầu của nó vẫn không thay đổi sau khi thủ tục được lưu trữ kết thúc. Nói cách khác, thủ tục lưu trữ chỉ hoạt động trên bản sao của tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ;Code language: SQL (Structured Query Language) (sql)2 thông sốGiá trị của tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2 có thể được thay đổi bên trong thủ tục được lưu trữ và giá trị mới của nó được chuyển trở lại chương trình gọiLưu ý rằng thủ tục được lưu trữ không thể truy cập giá trị ban đầu của tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2 khi nó bắt đầuDELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ;Code language: SQL (Structured Query Language) (sql)5 thông sốTham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5 là sự kết hợp của tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 và DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2. Điều đó có nghĩa là chương trình gọi có thể chuyển đối số và thủ tục được lưu trữ có thể sửa đổi tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5 và chuyển giá trị mới trở lại chương trình gọiXác định một tham sốĐây là cú pháp cơ bản để xác định một tham số trong thủ tục lưu sẵn [IN | OUT | INOUT] parameter_name datatype[(length)] Code language: SQL (Structured Query Language) (sql)
Trong cú pháp này, - Đầu tiên, chỉ định chế độ tham số, có thể là
DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 , DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2 hoặc DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5 tùy thuộc vào mục đích của tham số trong thủ tục lưu sẵn - Thứ hai, chỉ định tên của tham số. Tên tham số phải tuân theo quy tắc đặt tên của tên cột trong MySQL
- Thứ ba, chỉ định loại dữ liệu và độ dài tối đa của tham số
Các ví dụ về tham số thủ tục lưu trữ MySQLHãy lấy một số ví dụ về việc sử dụng các tham số thủ tục được lưu trữ Ví dụ về tham số INVí dụ sau tạo một thủ tục được lưu trữ để tìm tất cả các văn phòng đặt tại một quốc gia được chỉ định bởi tham số đầu vào CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 3DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql)
Trong ví dụ này, CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 3 là tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 của thủ tục lưu trữGiả sử bạn muốn tìm các văn phòng ở Hoa Kỳ, bạn cần chuyển một đối số ( CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 6) cho thủ tục được lưu trữ như trong truy vấn sauCALL GetOfficeByCountry('USA'); Code language: SQL (Structured Query Language) (sql)
Để tìm các văn phòng ở CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 7, bạn chuyển chuỗi ký tự CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 7 đến quy trình được lưu trữ CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 9 như sauCALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql)
Vì CALL GetOfficeByCountry('France') Code language: SQL (Structured Query Language) (sql) 3 là tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 nên bạn phải truyền một đối số. Nếu bạn không làm như vậy, bạn sẽ gặp lỗi. CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql)
Đây là lỗi Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript)
Ví dụ về tham số OUTThủ tục được lưu trữ sau đây trả về số lượng đơn hàng theo trạng thái đơn hàng DELIMITER $$
CREATE PROCEDURE GetOrderCountByStatus (
IN orderStatus VARCHAR(25),
OUT total INT
)
BEGIN
SELECT COUNT(orderNumber)
INTO total
FROM orders
WHERE status = orderStatus;
END$$
DELIMITER ; Code language: SQL (Structured Query Language) (sql)
Thủ tục được lưu trữ CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 2 có hai tham số- The
CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 3. là tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 chỉ định trạng thái của các đơn đặt hàng trả lại. CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 5. là tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2 lưu trữ số lượng đơn đặt hàng trong một trạng thái cụ thể
Để tìm số lượng đơn đặt hàng đã được giao, bạn gọi CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 7 và chuyển trạng thái đơn hàng là CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 8, đồng thời chuyển một biến phiên ( CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 9 ) để nhận giá trị trả vềCALL GetOrderCountByStatus('Shipped',@total);
SELECT @total; Code language: SQL (Structured Query Language) (sql)
Để biết số lượng đơn đặt hàng đang được xử lý, bạn gọi thủ tục được lưu trữ là CALL GetOfficeByCountry(); Code language: SQL (Structured Query Language) (sql) 7 như sau. CALL GetOrderCountByStatus('in process',@total);
SELECT @total AS total_in_process; Code language: SQL (Structured Query Language) (sql)
Ví dụ về tham số INOUTVí dụ sau minh họa cách sử dụng tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5 trong quy trình được lưu trữDELIMITER $$
CREATE PROCEDURE SetCounter(
INOUT counter INT,
IN inc INT
)
BEGIN
SET counter = counter + inc;
END$$
DELIMITER ; Code language: SQL (Structured Query Language) (sql)
Trong ví dụ này, thủ tục được lưu trữ Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript) 2 chấp nhận một tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5 ( Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript) 4 ) và một tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1 ( Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript) 6 ). Nó tăng bộ đếm ( Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript) 4 ) theo giá trị được chỉ định bởi tham số Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript) 6Các câu lệnh này minh họa cách gọi thủ tục được lưu trữ Error Code: 1318. Incorrect number of arguments for PROCEDURE classicmodels.GetOfficeByCountry; expected 1, got 0 Code language: JavaScript (javascript) 9DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 0Đây là đầu ra Trong hướng dẫn này, bạn đã học cách tạo thủ tục lưu trữ với các tham số bao gồm các tham số DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 1, DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 2 và DELIMITER //
CREATE PROCEDURE GetOfficeByCountry(
IN countryName VARCHAR(255)
)
BEGIN
SELECT *
FROM offices
WHERE country = countryName;
END //
DELIMITER ; Code language: SQL (Structured Query Language) (sql) 5 |