13.2.1 & NBSP; Câu lệnh gọi
CALL sp_name[[parameter[,...]]]
CALL sp_name[[]]
Tuyên bố CALL
gọi một quy trình được lưu trữ được xác định trước đó với CREATE PROCEDURE
.
Các thủ tục được lưu trữ không có đối số nào có thể được gọi mà không có dấu ngoặc đơn. Đó là, CALL p[]
và CALL p
là tương đương.
CALL
có thể chuyển các giá trị trở lại cho người gọi bằng các tham số được khai báo là các tham số OUT
hoặc
CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0. Khi thủ tục trả về, một chương trình máy khách cũng có thể có được số lượng hàng bị ảnh hưởng cho câu lệnh cuối cùng được thực thi trong thói quen: ở cấp SQL, hãy gọi hàm CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
1; Từ API C, hãy gọi hàm CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
2.Để biết thông tin về ảnh hưởng của các điều kiện chưa được xử lý đối với các tham số thủ tục, xem Phần & NBSP; 13.6.7.8, Xử lý điều kiện và ra các tham số hoặc ra các tham số.
Để lấy lại giá trị từ một thủ tục bằng tham số OUT
hoặc
CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0, hãy truyền tham số bằng biến người dùng, sau đó kiểm tra giá trị của biến sau khi thủ tục trả về. . Quy trình sau đây có tham số OUT
mà quy trình đặt thành phiên bản máy chủ hiện tại và giá trị CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0 mà quy trình tăng lên từ giá trị hiện tại của nó:CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
Trước khi gọi quy trình, khởi tạo biến sẽ được truyền dưới dạng tham số
CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0. Sau khi gọi thủ tục, bạn có thể thấy rằng các giá trị của hai biến được đặt hoặc sửa đổi:mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
Trong các câu lệnh CALL
được sử dụng với
mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
2 và mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
3, các giữ chỗ có thể được sử dụng cho các tham số CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
5, OUT
và các tham số CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0. Các loại tham số này có thể được sử dụng như sau:mysql> SET @increment = 10;
mysql> PREPARE s FROM 'CALL p[?, ?]';
mysql> EXECUTE s USING @version, @increment;
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
Để viết các chương trình C sử dụng câu lệnh CALL
SQL để thực hiện các quy trình được lưu trữ tạo ra các bộ kết quả, cờ
mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
8 phải được bật. Điều này là do mỗi CALL
trả về kết quả để chỉ ra trạng thái cuộc gọi, ngoài bất kỳ bộ kết quả nào có thể được trả về bởi các câu lệnh được thực thi trong quy trình. mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
8 cũng phải được bật nếu CALL
được sử dụng để thực hiện bất kỳ quy trình được lưu trữ nào có chứa các câu lệnh đã chuẩn bị. Không thể xác định được khi một thủ tục như vậy được tải cho dù các câu lệnh đó tạo ra các bộ kết quả, vì vậy cần phải cho rằng họ làm như vậy.
mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
8 có thể được bật khi bạn gọi mysql> SET @increment = 10;
mysql> PREPARE s FROM 'CALL p[?, ?]';
mysql> EXECUTE s USING @version, @increment;
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
3, rõ ràng bằng cách vượt qua cờ mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
8 hoặc hoàn toàn bằng cách vượt qua mysql> SET @increment = 10;
mysql> PREPARE s FROM 'CALL p[?, ?]';
mysql> EXECUTE s USING @version, @increment;
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
5 [cũng cho phép mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
8]. mysql> SET @increment = 10;
mysql> CALL p[@version, @increment];
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
8 được bật theo mặc định. Để xử lý kết quả của câu lệnh CALL
được thực thi bằng cách sử dụng
mysql> SET @increment = 10;
mysql> PREPARE s FROM 'CALL p[?, ?]';
mysql> EXECUTE s USING @version, @increment;
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log | 11 |
+--------------------+------------+
9 hoặc CALL
0, hãy sử dụng một vòng lặp gọi CALL
1 để xác định xem có nhiều kết quả hơn không. Ví dụ, xem hỗ trợ thực thi nhiều câu lệnh. Các chương trình C có thể sử dụng giao diện đã chuẩn bị để thực hiện các câu lệnh CALL
và truy cập các tham số OUT
và
CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0. Điều này được thực hiện bằng cách xử lý kết quả của câu lệnh CALL
bằng cách sử dụng vòng lặp gọi CALL
6 để xác định xem có nhiều kết quả hơn không. Ví dụ, xem hỗ trợ câu lệnh gọi đã chuẩn bị. Các ngôn ngữ cung cấp giao diện MySQL có thể sử dụng các câu lệnh CALL
được chuẩn bị để truy xuất trực tiếp các tham số thủ tục OUT
và CREATE PROCEDURE p [OUT ver_param VARCHAR[25], INOUT incr_param INT]
BEGIN
# Set value of OUT parameter
SELECT VERSION[] INTO ver_param;
# Increment value of INOUT parameter
SET incr_param = incr_param + 1;
END;
0.Các thay đổi siêu dữ liệu đối với các đối tượng được đề cập bởi các chương trình được lưu trữ được phát hiện và gây ra tự động lặp lại các câu lệnh bị ảnh hưởng khi chương trình được thực hiện tiếp theo. Để biết thêm thông tin, hãy xem Phần & NBSP; 8.10.3, Bộ nhớ đệm của các câu lệnh đã chuẩn bị và các chương trình được lưu trữ.