阅读背景:

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;
存储过程
1.不带参数的存储过程的定义调用
#声明
CREATE PROCEDURE sp1(



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: