Hướng dẫn mysql stored procedure multiple parameters - thủ tục lưu trữ mysql nhiều tham số

Ví dụ về chức năng: Gọi getthings (số tiền, địa điểm, giới hạn, marginerror)call getThings(amount, place, limit, marginError)

Tóm tắt nội dung: CALL getThings(4, PA, 3, 1.2);

Ví dụ về mục tiêu:

CREATE PROCEDURE getThings(IN amount X, place VARCHAR(30), lim INT, marginError double)
SELECT place, limit, amount
FROM AREA, PRODUCT
WHERE AREA.place=PRODUCT.place
AND PRODUCT.AREA=place
ORDER BY ABS(AMOUNT-marginError)
LIMIT lim;
END

Mục tiêu mong muốn là lấy 3 sản phẩm gần nhất từ ​​một quy trình được lưu trữ (sử dụng MySQL) nhưng tôi tiếp tục nhận được lỗi SYTAX khi cố gắng tạo quy trình.

& nbsp; Tóm tắt: Trong hướng dẫn này, bạn sẽ tìm hiểu cách phát triển các quy trình được lưu trữ trả về nhiều giá trị.: in this tutorial, you will learn how to develop stored procedures that return multiple values.

Hàm lưu trữ MySQL chỉ trả về một giá trị. Để phát triển các chương trình được lưu trữ trả về nhiều giá trị, bạn cần sử dụng các quy trình được lưu trữ với các tham số INOUT hoặc OUT.

Nếu bạn không quen thuộc với các tham số INOUT hoặc OUT, hãy kiểm tra hướng dẫn tham số quy trình được lưu trữ để biết thông tin chi tiết.

Hãy cùng xem bảng orders trong cơ sở dữ liệu mẫu.

Hướng dẫn mysql stored procedure multiple parameters - thủ tục lưu trữ mysql nhiều tham số

Quy trình được lưu trữ sau đây chấp nhận & nbsp; số khách hàng và trả về tổng số đơn đặt hàng đã được vận chuyển, hủy bỏ, giải quyết và tranh chấp.

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)

Ngoài tham số

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)
0, quy trình được lưu trữ có bốn tham số OUT bổ sung: được vận chuyển, hủy bỏ, giải quyết và tranh chấp. Bên trong quy trình được lưu trữ, bạn sử dụng câu lệnh

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)
2 với hàm

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)
3 để có tổng số đơn đặt hàng tương ứng dựa trên trạng thái đơn hàng và gán nó cho tham số tương ứng.

Để sử dụng quy trình được lưu trữ

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)
4, bạn vượt qua số khách hàng và bốn biến do người dùng xác định để có được các giá trị ra.

Sau khi thực hiện quy trình được lưu trữ, bạn sử dụng câu lệnh

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)
2 để xuất các giá trị biến.

CALL get_order_by_cust(141,@shipped,@canceled,@resolved,@disputed); SELECT @shipped,@canceled,@resolved,@disputed;

Code language: SQL (Structured Query Language) (sql)
Calling Các thủ tục được lưu trữ trả về nhiều giá trị từ PHP
Hướng dẫn mysql stored procedure multiple parameters - thủ tục lưu trữ mysql nhiều tham số

Calling stored procedures that return multiple values from PHP

Đoạn mã sau đây chỉ cho bạn cách gọi quy trình được lưu trữ trả về nhiều giá trị từ PHP.

/** * Call stored procedure that return multiple values * @param $customerNumber */ function call_sp($customerNumber) { try { $pdo = new PDO("mysql:host=localhost;dbname=classicmodels", 'root', ''); // execute the stored procedure $sql = 'CALL get_order_by_cust(:no,@shipped,@canceled,@resolved,@disputed)'; $stmt = $pdo->prepare($sql); $stmt->bindParam(':no', $customerNumber, PDO::PARAM_INT); $stmt->execute(); $stmt->closeCursor(); // execute the second query to get values from OUT parameter $r = $pdo->query("SELECT @shipped,@canceled,@resolved,@disputed") ->fetch(PDO::FETCH_ASSOC); if ($r) { printf('Shipped: %d, Canceled: %d, Resolved: %d, Disputed: %d', $r['@shipped'], $r['@canceled'], $r['@resolved'], $r['@disputed']); } } catch (PDOException $pe) { die("Error occurred:" . $pe->getMessage()); } } call_sp(141);

Code language: PHP (php)

Các biến do người dùng xác định, là & nbsp; trước & nbsp; bằng dấu

DELIMITER $$ CREATE PROCEDURE get_order_by_cust( IN cust_no INT, OUT shipped INT, OUT canceled INT, OUT resolved INT, OUT disputed INT) BEGIN -- shipped SELECT count(*) INTO shipped FROM orders WHERE customerNumber = cust_no AND status = 'Shipped'; -- canceled SELECT count(*) INTO canceled FROM orders WHERE customerNumber = cust_no AND status = 'Canceled'; -- resolved SELECT count(*) INTO resolved FROM orders WHERE customerNumber = cust_no AND status = 'Resolved'; -- disputed SELECT count(*) INTO disputed FROM orders WHERE customerNumber = cust_no AND status = 'Disputed'; END

Code language: SQL (Structured Query Language) (sql)
6, được liên kết với kết nối cơ sở dữ liệu, do đó, chúng có sẵn để truy cập giữa các cuộc gọi.

Trong hướng dẫn này, chúng tôi đã chỉ cho bạn cách phát triển một quy trình được lưu trữ trả về nhiều giá trị và cách gọi nó từ PHP.

Hướng dẫn này có hữu ích không?

Có thể chuyển 3 loại tham số cho các thủ tục được lưu trữ chúng là gì?

Là một chương trình, một thủ tục được lưu trữ có thể lấy các tham số. Có ba loại tham số: In, Out và Inout.IN, OUT and INOUT.

Một thủ tục có thể có nhiều hơn một tham số?

Bạn có thể xác định một quy trình không có tham số, một tham số hoặc nhiều hơn một.Phần của định nghĩa thủ tục chỉ định các tham số được gọi là danh sách tham số.Một đối số biểu thị giá trị bạn cung cấp cho một tham số thủ tục khi bạn gọi thủ tục.. The part of the procedure definition that specifies the parameters is called the parameter list. An argument represents the value you supply to a procedure parameter when you call the procedure.

Chúng ta có thể tạo nhiều hơn một tham số cho thủ tục được lưu trữ không?

Một thủ tục được lưu trữ có thể có nhiều tham số đầu ra.Ngoài ra, các tham số đầu ra có thể nằm trong bất kỳ loại dữ liệu hợp lệ nào, ví dụ: số nguyên, ngày và ký tự khác nhau.. In addition, the output parameters can be in any valid data type e.g., integer, date, and varying character.

Làm thế nào tôi có thể trả về nhiều giá trị từ một quy trình được lưu trữ trong MySQL?

Hàm lưu trữ MySQL chỉ trả về một giá trị.Để phát triển các chương trình được lưu trữ trả về nhiều giá trị, bạn cần sử dụng các quy trình được lưu trữ với các tham số inout hoặc out.Nếu bạn không quen thuộc với các tham số Inout hoặc Out, hãy xem hướng dẫn tham số quy trình được lưu trữ để biết thông tin chi tiết.use stored procedures with INOUT or OUT parameters. If you are not familiar with INOUT or OUT parameters, check it out the stored procedure's parameters tutorial for the detailed information.