存储过程与游标

来源:互联网 发布:推荐算法有哪些 编辑:程序博客网 时间:2024/04/30 22:44

查看存储过程定义的方法

有以下4种:
1. 使用show procedure status命令查看存储过程的定义
2. 查看某个数据库中所有存储过程名

select  name from mysql.proc where db='yourdb' and type='procedure';
  1. 使用MySQL命令”show create procedure 存储过程名;”
  2. 在系统的information_schema数据库中,使用select语句查询存储过程相关信息。
select * from information_schema.rountines where rountine_name='yourprocname';

存储过程与函数的区别与联系

联系:
- 应用程序调用存储过程或函数时,只需要提供过程名或者函数名,以及参数信息,将若干条MySQL指令发送到MySQL服务器上,节省了网络开销。
- 存储过程或函数可重复使用,减少了数据库开发人员,尤其是应用程序开发人员的工作量
- 可以增强安全访问控制。可以设定只有某些数据库用户才具有某些存储过程或函数的执行权
区别:
- 函数必须有一个返回值,且必须决定返回值的数据类型。存储过程则对于返回值没有限定条件,由out或者inout参数定义。
- 在函数中可使用select…into语句为某个变量赋值,但不能使用select语句返回结果(集);存储过程则没有限制。
- 函数可以直接嵌入到SQL语句中,而存储过程需要单独调用,需要使用call关键字。
- 函数中的限制较多,比如不能使用与事务操作相关的操作。
- 应用程序调用函数时,通常将函数封装到SQL字符串中调用。而在调用存储过程时,必须使用call关键字调用。如果希望获取存储过程的返回值,则必须给存储过程的out参数活inout参数传递MySQL会话变量。

错误处理类型、错误触发条件、错误处理程序

错误处理类型

  • continue
  • exit

错误触发条件
用于定义自定义错误处理程序运行的时机。有3种取值

  1. MySQL错误代码
  2. ANSI标志错误代码
  3. 自定义错误触发条件

自定义错误处理程序
错误发生后,MySQL会立即执行自定义错误处理程序中的MySQL语句,自定义错误处理程序也可以是一个begin-end语句块。

游标的使用步骤

  1. 声明游标
declare 游标名 cursor for select 语句;
  1. 打开游标
open 游标名
  1. 从游标中提取数据
fetch 游标名 into 变量名1,变量名2
  1. 关闭游标
close 游标名

如何遍历游标的结果集

delimiter $$create procedure update_course_score_proc(in c_no int)modifies sql databegin declare s_no int;declare grade int;declare state char(20);declare score_cursor cursor for select student_no,score from choose where course_no=c_no;declare continue handler for 1329 set state='error';open score_cursor;repeatfetch score_cursor into s_no,grade;set grade = grade + 5;if(grade>100) then set grade = 100;end if;if(grade >=55 && grade<=59) then set grade=60;end if;update choose set score=grade where student_no=s_no and course_no=c_no;until state='error'end repeat;close score_cursor;end$$delimiter ;
0 0
原创粉丝点击