INSERT INTO borrow_order_2017 ( id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status ) SELECT id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status FROM borrow_order WHERE SUBSTR( borrow_id, 1, 1 ) REGEXP '[^0-9.]' = 1 AND SUBSTR( borrow_id, 2, 4 ) = '2017' OR SUBSTR( borrow_id, 1, 4 ) = '2017'; 将这个sql 改成 插入 borrow_order_2017,borrow_order_2018,borrow_order_2019 的循环sql
时间: 2024-02-15 13:03:46 浏览: 74
以下是将原 SQL 查询语句改写成循环插入 borrow_order_2017,borrow_order_2018,borrow_order_2019 表的 SQL 循环语句:
```
DELIMITER //
CREATE PROCEDURE insert_borrow_orders()
BEGIN
DECLARE i INT DEFAULT 2017;
WHILE i <= 2019 DO
SET @table_name = CONCAT('borrow_order_', i);
SET @query = CONCAT('INSERT INTO ', @table_name, ' (id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status) SELECT id, order_no, borrow_id, glc, libcode, rdid, create_time, should_revert_time, revert_time, status FROM borrow_order WHERE SUBSTR(borrow_id, 1, 1) REGEXP ''[^0-9.]'' = 1 AND SUBSTR(borrow_id, 2, 4) = ''', i, ''' OR SUBSTR(borrow_id, 1, 4) = ''', i, ''';');
PREPARE statement FROM @query;
EXECUTE statement;
SET i = i + 1;
END WHILE;
END //
DELIMITER ;
```
该 SQL 循环语句创建了一个名为 `insert_borrow_orders` 的存储过程,以循环方式插入 borrow_order_2017,borrow_order_2018,borrow_order_2019 表。在循环内部,使用 `SET` 语句设置变量 `@table_name` 和 `@query` 分别表示当前要插入的表名和要执行的 SQL 插入语句。在每次循环中,使用 `PREPARE` 和 `EXECUTE` 语句动态执行当前的 SQL 插入语句。最后,使用 `SET` 语句对变量 `i` 进行自增操作以完成循环。注意,在该存储过程中,`DELIMITER` 命令被用于更改分隔符,以便正确处理存储过程中的代码块。
阅读全文