数据库--五

存储过程和函数

创建存储过程:

-- 例1:在stuscore库中创建一个存储过程,用于返回xsqk表中女生的信息。
->delimiter $$ 
->create procedure info_girl()  
->begin 
->select *from xsqk where ssex='女' 
->end $$ 
-- 提示:delimiter$$的作用是将语句的结束符“;”修改为"$$"
-- 调用存储过程:
->call info_girl();
-- 例2:在stuscore库中创建一存储过程,要求实现如下功能:根据学生的学号,查询该学生的选课情况,
-- 其中包含学生的学号,姓名,性别,课程号,课程名成绩信息。
->create procedure info_sc(in no char(8))
->begin
->select xsqk.学号,姓名,性别,xscj.课程号,课程名,成绩 from xsqk join xscj on xsqk.学号
->=xscj.学号 join xskc on xscj.课程号=xskc.课程号where xsqk.学号=no;
->end
-- 调用存储过程:
->call info_sc('02020101');
-- 例3:在stuscore库中创建一存储过程,在存储过程中使用输出参数(output),得到两个整数的和。
->create procedure calc(in first int,in second int,out sum int)
->begin
->set sum=first+second;
->end

调用存储过程

->call calc(4,5,@sum);
->select @sum;

创建存储函数

-- 例1:在stuscore数据库中创建一存储函数,返回xsqk表的学生的总数。
->create function fun_count()
->returns int
->begin
->return (select count(*) from xsqk) ;
->end
-- 例2:在stuscore数据库中创建一存储函数,求长方形的面积。
->create function fun_area(length int, width int)
->returns int
->begin
->return (length*width);
->end

关于存储过程和函数的表达式

一:变量
-- 1 .用户变量: set @id=3;   
->select @name:='张三';
->select 学号,姓名 from xsqk where 学号='02020101' into @sno,@sname-- 2. 局部变量(只限于语句块,使用declare声明,使用set为变量赋值)
-- 3.系统变量
->show session variables;--查看所有会话变量  
->show global variables;--查看所有全局变量
-- 例1:捕获sqlstate_value
->declare continue handler for sqlstate ‘42s02’  SET @info='can not find';
-- 释义:表示遇到 sqlstate‘42s02’这个异常,程序继续执行,同时设置变量值info的值为can not find
-- 例2:捕获mysql_error_code
->DECLARE CONTINUE HANDLER FOR 1146 SET @info='can not find';
-- 例3:先定义条件,然后再调用条件
->DECLARE can_not_find CONDITION FOR 1146 ;
->DECLARE CONTINUE HANDLER FOR can_not_find SET @info='can not find';
-- 释义:先定义一个异常can not found 代表1146这种错误,接着定义处理程序,
-- 遇到can not found 这种错误,程序继续执行,同时设置用户变量的值为can not found
-- 例4:使用SQLWARNING
->DECLARE EXIT HANDLER FOR SQLWARNING SET @info='error';
-- 释义:遇到sqlwarning 这种异常 ,退出程序同时设置info的值为error
-- 例5:使用NOT FOUND
->DECLARE EXIT HANDLER FOR NOT FOUND SET @info='can not find';
-- 释义:遇到not found 这种异常,退出程序,同时set info的值为can not found
-- 例6:使用SQLEXCEPTION
->DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info='error';
-- 释义:遇到sqlexception 这种异常,退出程序同时设置info 的值为error
  小贴士
  	注意@sum和sum,注意@sum是用户变量,而sum是局部变量,他俩的作用范围不一样

  	在mysql中如何定义异常呢,关键字是什么?
  	declare...condition

  	例题:以名为not_found_database的条件 error1049(42000)的定义为例,两种形式的区别别
  	declare not found database condition for 1049;
  	declare not found database condition for sqlstate '42000';  (sqlstate 表示长度为5的字符串类型错误代码)

  	定义完异常,如果程序出现了异常,我们如何定义处理程序呢?
  	declare...handler       (mysql不支持undo处理类型)

  	handler type表示异常处理类型:continue  和 exit

  	condition value表示 错误值 :
  	1. mysql_error_code:表示数值类型的错误代码。

  	2 .sqlstate_value:表示包含5个字符的字符串错误值。

  	3 .condition_name:表示使用DECLARE…CONDITION语句定义的条件名。

  	4. SQLWARNING:匹配所有以01开头的SQLSTATE错误代码。

  	5 .NOT FOUND:匹配所有以02开头的SQLSTATE错误代码。

  	6 .SQLEXCEPTION:匹配所有未被SQLWARNING和NOT FOUND捕获的SQLSTATE错误代码

  	concat是字符串拼接函数,将多个字符串拼接成一个字符串。

  	cast是数据类型转换函数,trim是去掉空格。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值