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

SQL động để nhận một tham số và sử dụng nó trong LIKE cho một bảng mới được tạo bên trong một thủ tục được lưu trữ

Đối với điều này, hãy sử dụng câu lệnh đã chuẩn bị. Đầu tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable1973
   (
   StudentId int,
   StudentName varchar(20)
   );
Query OK, 0 rows affected (0.00 sec)

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

mysql> insert into DemoTable1973 values(101,'Chris');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1973 values(102,'John Doe');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1973 values(103,'David');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1973 values(104,'John Smith');
Query OK, 1 row affected (0.00 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 DemoTable1973;

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

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       101 | Chris       |
|       102 | John Doe    |
|       103 | David       |
|       104 | John Smith  |
+-----------+-------------+
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à một bảng mới với mệnh đề LIKE có giá trị từ lệnh gọi thủ tục -

mysql> DELIMITER //
mysql> create PROCEDURE demo_create(IN newTableName varchar(20),IN tbl varchar(20))
   BEGIN
      DROP TABLE IF EXISTS newTableName;
      SET @query= CONCAT('CREATE TABLE newTableName as SELECT * from DemoTable1973 WHERE StudentName like ''%',tbl,'%''');
      PREPARE ps FROM @query;
      EXECUTE ps;
    END
   //
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER ;

Gọi thủ tục đã lưu trữ bằng lệnh gọi -

mysql> call demo_create('newTableName','John');
Query OK, 2 rows affected (0.00 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 newTableName;

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

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|       102 | John Doe    |
|       104 | John Smith  |
+-----------+-------------+
2 rows in set (0.00 sec)