存储过程可以插入单组数据,也可以以字符串的形式插入多组数据,将字符串中的信息拆分成插入的数据。
首先建立一个简单的数据库
create database student;
use student;
选中数据库之后建立一张学生表
create table stu(
uid int primary key,
uname varchar(20),
department varchar(20)
);
**首先建立一个存储单组数据的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_stu`(
IN `id` int,
IN `name` varchar(20),
IN `department` varchar(20))
BEGIN
declare cnt int;
select count(*) into cnt from stu where stu.uid = id;
if cnt = 0 then insert into stu(uid,uname,department) values(id,name,department);
end if;
END
注意,这里的cnt并不是无用变量,cnt用来判断将要插入的主键在表中是否已经存在。
调用该存储过程
call insert_stu(1,'小蓝','项管部');
[!NOTE]
注意:调用存储过程使用
call
,调用函数使用select
.
建立一个插入多组数据的存储过程
CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_stu_multipe`(IN stustr varchar(2000))
BEGIN
#Routine body goes here...
declare str varchar(200);
declare uid int;
declare uname varchar(20);
declare department varchar(20);
while stustr > '' do
set str = mid(stustr,1,locate(';',stustr)-1);
set uid = cast(mid(str,1,locate(',',str) - 1) as signed);
set str = mid(str,locate(',',str) + 1);
set uname = mid(str,1,locate(',',str) - 1);
set department = mid(str,locate(',',str) + 1);
call insert_stu(uid,uname,department);
set stustr = mid(stustr,locate(';',stustr) + 1);
end while;
END
[!IMPORTANT]
1、函数mid(column_name,start[,length]) 从文本段中提取字符。文本名column_name,开始位置为start,长度为length(如果长度省略,默认截取到最后一位字符)
2、LOCATE() 函数在字符串中快速搜索子字符串,并返回其位置。如果在原始字符串中找不到子字符串,则此函数返回0,此函数执行不区分大小写。
3、CAST函数用于将某种数据类型的表达式显式转换为另一种数据类型。
4、可以在该存储过程中调用存储过程insert_stu,减少代码量。
调用该存储过程
call insert_stu_multipe('2,小明,项管部;3,小刚,外务部;4,小红,社会实践部;');
查看最终结果