1.表结构如下
CREATE TABLE `person` (
`id` int NOT NULL AUTO_INCREMENT,
`name` varchar(20) DEFAULT NULL,
`address` varchar(100) DEFAULT NULL,
`gmt_created` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
index idx_name (name)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
2.创建存储过程
-- 第一步,删除原有存储过程
drop procedure if exists insert_person;
-- 第二步,创建新存储过程
-- 2.1 重新定义结束符。mysql客户端默认结束符为分号(;),当遇到分号时,执行器会执行语句。由于存储过程是完整逻辑,里包含分号,因此重新定义结束符
delimiter $
create procedure insert_person(IN p_in int)
begin
declare i int;
declare name varchar(20);
declare address varchar(100);
set i = 1;
while i <= p_in do
set name = CONCAT('name', i);
set address = CONCAT_WS('#', 'address', i);
insert into person(`name`, `address`) values(name, address);
set i = i + 1;
end while;
end $
-- 2.2 重新定义结束符
delimiter ;
-- 第三步,调用
set @p = 1000000;
call insert_person(@p);
当存储过程为无参时,调用时直接为call my_procedure; 不需要带括号。