存储过程
存储过程是事先经过编译并存储在数据库中的一段SQL 语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。
存储过程思想上很简单,就是数据库SQL 语言层面的代码封装与重用。
特点
- 封装
- 复用
- 可以接收参数,也可以返回数据减少网络交互,效率提升
创建
CREATE PROCEDURE 存储过程名称( [参数列表] )
BEGIN
SQL 语句
END;
NOTE: 在命令行中,执行创建存储过程的SQL时,需要通过关键字delimiter 指定SQL语句的结束符。默认是 分号作为结束符。
delimiter $ ,则 $ 符作为结束符。
调用
CALL 名称 ( [参数])
查看
查询指定数据库的存储过程及状态信息
SELECT* FROM INFORMATION\_SCHEMA.ROUTINES WHERE ROUTINE\_SCHEMA = 'xxx'
存储过程名称;—查询某个存储过程的定义
SHOW CREATE PROCEDURE
删除
DROP PROCEDURE [ IFEXISTS ] 存储过程名称
游标
游标(CURSOR)是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和CLOSE,其语法分别如下。
声明游标:
DECLARE 游标名称 CURSOR FOR 查询语句打开游标:
OPEN 游标名称获取游标记录:
FETCH 游标名称INTO变量[变量]
条件处理程序:
条件处理程序(Handler)可以用来定义在流程控制结构执行过程中遇到问题时相应的处理步骤。具体语法为:
DECLARE handler action HANDLER FOR condition value L condition value]..statement
handler\_action CONTINUE:继续执行当前程序
EXIT:终止执行当前程序
condition\_value :
SQLSTATE sqlstate\_value:状态码,如02000
SQLWARNING:所有以01开头的SQLSTATE代码的简写
NOT FOUND:所有以02开头的SQLSTATE代码的简写
SQLEXCEPTION:所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的简写
例子:
NOTE:要先声明普通变量,再申请游标。
要求:
根据传入的参数uage,来查询用户表tb\_user中,所有的用户年龄小于等于uage的用户姓名(name)和专业(profession),并将用户的姓名和专业插入到所创建的一张新表(id,name,profession)中。
create procedure p1l(in uage int)
begin
declare uname varchar(100);
decLare upro varchar(100);
declare u_cursor cursor for select name,profession from tb_user where age <= uage;
当 条件处理程序的处理的状态码为02000的时候,就会退出。
declare exit handler for SQLSTATE '02000'close u_cursor;
drop table if exists tb_user_pro;
create table if not exists tb_user_pro(
id int primary key auto_increment,
name varchar(100),
profession varchar(100)
);
open u_cursor;
while true do
fetch u_cursor into uname,Upro;
insert into tb_user_pro values(null,uname,Upro);
end while;
close u_cursor;
end;
此处评论已关闭