存储过程
1.不带参数的存储过程的定义调用
#声明
CREATE PROCEDURE sp1() SELECT VERSION();
#调用
CALL sp1();
2.带参数的存储过程
#声明 创建一个存储过程,查询表中政治民族为。。。的学生的学号.姓名.性别
delimiter $$
CREATE PROCEDURE cp_student(in zzmm char(8))
BEGIN
select 学号,姓名,性别,政治民族
from student
where 政治民族 = zzmm
order by 学号;
end $$
delimiter;
#调用 查询性别为女的学生的所有信息
delimiter $$
CREATE PROCEDURE cp_sex(in xb char(2))
BEGIN
select * from student
where 性别 = xb;
end $$
delimiter;
call cp_sex
#涉及输入参数和输出参数
#p_name为输出成绩,用来返回
delimiter $$
CREATE PROCEDURE cp_score(in p_name char(10),out p_score DECIMAL(4,1))
BEGIN
SELECT b.成绩 into p_score from student a, sc b
where a.学号 = b.学号
and 姓名 = p_name;
end $$
delimiter;
#调用
CALL cp_score('肖筝',@p_score);
SELECT CONCAT('肖筝','的成绩是',@p_score) as 结果为 ;
3.修改存储过程 修改存储过程的特征
ALTER PROCEDURE cp_student
MODIFIES sql DATA
sql SECURITY INVOKER; #权限:definer 定义者 invoker 调用者
4.删除存储过程
DROP PROCEDURE if EXISTS
5.查看存储过程
#查看cp_student存储过程的文本定义信息
show PROCEDURE STATUS like 'cp_score';
#查看存储过程
show PROCEDURE STATUS like 'cp_score';
6.存储过程中出错c
#插入一个数据,但是学号已经存在,查看错
##错误类型continue 错误发生后 执行自定义错误处理 然后忽略该错误继续执行
# exit 错误发生后 执行自定义错误处理 然后停止其他语句执行
delimiter $$
CREATE PROCEDURE p_insert()
BEGIN
DECLARE info int DEFAULT 0 ;
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' set @info = 1;
INSERT INTO student
VALUES('160504108','张博玮','男','1999-07-08','汉族','共青团员');
END $$
delimiter;
#查询存储过程
CALL p_insert();
SELECT @info;
MySQL之存储过程
最新推荐文章于 2023-08-08 17:06:29 发布