Computer >> Máy Tính >  >> Lập trình >> MySQL

Triển khai truy vấn SQL động bên trong một thủ tục được lưu trữ MySQL?

Đối với truy vấn SQL động trong một thủ tục được lưu trữ, hãy sử dụng khái niệm BÁO CÁO CHUẨN BỊ. Đầu tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable2033
   -> (
   -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> Name varchar(20)
   -> );
Query OK, 0 rows affected (1.61 sec)

Chèn một số bản ghi vào bảng bằng lệnh chèn -

mysql> insert into DemoTable2033(Name) values('Chris');
Query OK, 1 row affected (0.85 sec)

mysql> insert into DemoTable2033(Name) values('Bob');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DemoTable2033(Name) values('David');
Query OK, 1 row affected (0.24 sec)

mysql> insert into DemoTable2033(Name) values('Mike');
Query OK, 1 row affected (0.12 sec)

Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -

mysql> select *from DemoTable2033;

Điều này sẽ tạo ra kết quả sau -

+----+-------+
| Id | Name  |
+----+-------+
| 1  | Chris |
| 2  | Bob   |
| 3  | David |
| 4  | Mike  |
+----+-------+
4 rows in set (0.00 sec)

Sau đây là truy vấn để tạo một thủ tục được lưu trữ và triển khai SQL động -

mysql> delimiter //
mysql> create procedure dynamic_query()
   -> begin
   -> set @query=concat("select *from DemoTable2033 where Id=3");
   -> prepare st from @query;
   -> execute st;
   -> end
   -> //
Query OK, 0 rows affected (0.13 sec)

mysql> delimiter ;

Gọi thủ tục đã lưu trữ -

mysql> call dynamic_query();

Điều này sẽ tạo ra kết quả sau -

+----+-------+
| Id | Name  |
+----+-------+
| 3  | David |
+----+-------+
1 row in set (0.04 sec)
Query OK, 0 rows affected (0.05 sec)