Hướng dẫn call procedure in procedure mysql - thủ tục gọi trong thủ tục mysql

Tôi không thể tìm thấy câu trả lời này ở bất cứ đâu, nhưng bạn có thể gọi một quy trình được lưu trữ từ một quy trình được lưu trữ khác trong MySQL không? Tôi muốn lấy lại giá trị nhận dạng và sử dụng nó trong quy trình lưu trữ của cha mẹ. Chúng tôi không thể sử dụng các chức năng nữa!

Đã hỏi ngày 12 tháng 6 năm 2012 lúc 16:27Jun 12, 2012 at 16:27

Hướng dẫn call procedure in procedure mysql - thủ tục gọi trong thủ tục mysql

Mike Flynnmike FlynnMike Flynn

22K51 Huy hiệu vàng176 Huy hiệu bạc330 Huy hiệu Đồng51 gold badges176 silver badges330 bronze badges

CREATE PROCEDURE innerproc(OUT param1 INT)
BEGIN
 insert into sometable;
 SELECT LAST_INSERT_ID() into param1 ;
END
-----------------------------------
CREATE PROCEDURE outerproc()
BEGIN
CALL innerproc(@a);
// @a gives you the result of innerproc
SELECT @a INTO variableinouterproc FROM dual;
END

Các tham số OUT sẽ giúp bạn đưa các giá trị trở lại quy trình gọi. Dựa trên đó, giải pháp phải là một cái gì đó như thế này.

Đã trả lời ngày 12 tháng 6 năm 2012 lúc 16:34Jun 12, 2012 at 16:34

Hướng dẫn call procedure in procedure mysql - thủ tục gọi trong thủ tục mysql

Ahamed mustafa mahamed mustafa mAhamed Mustafa M

3.0391 Huy hiệu vàng22 Huy hiệu bạc33 Huy hiệu đồng1 gold badge22 silver badges33 bronze badges

5

Để gọi một thủ tục khác, hãy sử dụng cuộc gọi: Ex: Call SP1(parm1, parm2);

Để có được danh tính, bạn đã thử kiểm tra last_insert_id (); Bạn sẽ làm một cái gì đó như SELECT LAST_INSERT_ID() sau cuộc gọi SP của bạn.

Đây là một ví dụ hoàn chỉnh, được thử nghiệm:

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;

Đã trả lời ngày 12 tháng 6 năm 2012 lúc 16:31Jun 12, 2012 at 16:31

4

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

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
0.

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à,

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
1 và
DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
2 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à OUT hoặc

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5 tham số. Khi thủ tục trả về, một chương trình máy khách cũng có thể thu đượ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
DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
6; Từ API C, hãy gọi hàm
DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
7.

Để 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

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5, 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ị
DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5 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ố

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5. 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

CALL sp_name([parameter[,...]])
CALL sp_name[()]
7 và
CALL sp_name([parameter[,...]])
CALL sp_name[()]
8, các giữ chỗ có thể được sử dụng cho các tham số
CALL sp_name([parameter[,...]])
CALL sp_name[()]
0, OUT
DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5 tham số. 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ờ

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;
3 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.
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;
3 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.

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;
3 có thể được bật khi bạn gọi
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;
8, rõ ràng bằng cách vượt qua 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;
3 hoặc hoàn toàn bằng cách vượt qua
mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version           | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log |         11 |
+--------------------+------------+
0 (cũng cho phép
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;
3).
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;
3 đượ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> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version           | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log |         11 |
+--------------------+------------+
4 hoặc
mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version           | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log |         11 |
+--------------------+------------+
5, hãy sử dụng một vòng lặp gọi
mysql> SET @increment = 10;
mysql> CALL p(@version, @increment);
mysql> SELECT @version, @increment;
+--------------------+------------+
| @version           | @increment |
+--------------------+------------+
| 8.0.3-rc-debug-log |         11 |
+--------------------+------------+
6 để 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

DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5. Đ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
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 |
+--------------------+------------+
1 để 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 để truy xuất trực tiếp các tham số thủ tục OUT
DELIMITER $$

CREATE TABLE animals (
     id MEDIUMINT NOT NULL AUTO_INCREMENT,
     name CHAR(30) NOT NULL,
     PRIMARY KEY (id)
) $$

CREATE PROCEDURE sp1()
BEGIN
  insert into animals (name) values ('bear');
END $$

CREATE PROCEDURE sp2()
BEGIN
  call sp1;
  select last_insert_id();
END $$

call sp2;
5.

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ữ.

Chúng ta có thể gọi thủ tục trong quy trình trong MySQL không?

Hoàn toàn có khả năng một quy trình lưu trữ MySQL có thể gọi một quy trình lưu trữ MySQL khác bên trong nó. Để chứng minh điều đó, chúng tôi đang lấy một ví dụ trong đó một quy trình được lưu trữ sẽ gọi một quy trình được lưu trữ khác để tìm ra Last_insert_id.. To demonstrate it, we are taking an example in which a stored procedure will call another stored procedure to find out the last_insert_id.

Làm thế nào để bạn gọi một thủ tục trong một thủ tục?

Dưới đây là một ví dụ về cách gọi một thủ tục được lưu trữ bên trong một quy trình được lưu trữ khác.Điều này còn được gọi là các quy trình lưu trữ lồng nhau trong SQL Server.Bước 1: Tạo hai quy trình được lưu trữ đơn giản để chèn một số dữ liệu vào hai bảng khác nhau. Both chấp nhận bốn tham số để chèn dữ liệu.Create two simple stored procedure to insert some data into two different tables. both accept four parameters to insert the data.

Chúng ta có thể gọi thủ tục trong quy trình trong SQL không?

Bạn có thể gọi thủ tục được lưu trữ bên trong một quy trình được lưu trữ khác;JavaScript trong quy trình được lưu trữ bên ngoài có thể lấy và lưu trữ đầu ra của quy trình được lưu trữ bên trong.; the JavaScript in the outer stored procedure can retrieve and store the output of the inner stored procedure.

Chúng ta có thể gọi thủ tục từ một thủ tục khác không?

Trong các ứng dụng cơ sở dữ liệu lớn, người ta thường gọi một quy trình được lưu trữ từ một quy trình được lưu trữ khác.Trong blog này, tôi sẽ giải thích cách thực hiện một quy trình được lưu trữ trong một quy trình được lưu trữ khác trong SQL Server.Hãy bắt đầu với việc tạo ra một thủ tục được lưu trữ.Đây là truy vấn để tạo quy trình đầu tiên của chúng tôi:.it is common to call one stored procedure from another stored procedure. In this blog, I will explain how to execute a stored procedure within another stored procedure in SQL Server. Let's start with creating a stored procedure. Here's the query for creating our first procedure:.