MySQL之存储过程

存储过程
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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值