数据库--五

存储过程和函数

创建存储过程:

-- 例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  和 exitcondition 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是去掉空格。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部