目录
六、例子——一个带参数的存储过程”创建、调用、查看执行结果”
一、条件
mysql5及其之后才支持存储过程
二、定义
预编译的多条sql语句的集合
三、好处
执行比sql快
四、创建存储过程语法
1.不带参数的
create proceduce 存储过程名字()
begin
过程体 //里面可以用游标
end;
2.带参数的(oracle、mysql)
create proceduce 存储过程名字(参数1,参数2)
begin
过程体
end;
3.带参数的(sqlserver)
create proceduce 存储过程名字 参数1,参数2
begin
过程体
end;
五、调用存储过程语法
mysql和oracle中:
call 存储过程名字(); //不带参数
call 存储过程名字(参数1,参数2); //带参数
注意:exec和call的区别在于exec只能用于sqlplus,不是sql关键字;而call可用于任何sql中
sqlserver中:
exec 存储过程名字; //不带参数
call 存储过程名字 参数1,参数2; //带参数
六、例子——一个带参数的存储过程”创建、调用、查看执行结果”
参数:
in——传递给存储过程(调用时传入,然后传递给存储过程【传给参数,然后再传递给过程体】)
out——从存储过程传出(【过程体传给参数】从存储过程传出,调用时赋值给变量)
inout——对存储体传入传出
1. 例子一:out参数
(1) 创建
create proceduce MYTEST1( out a int ,out b int) //第二步:参数a、b接受到过程体传来的值
begin
select min(age) from 表名 into a; //第一步:into关键字,把min(age)、max(age)赋值给参数a、b*/
select max(age) from 表名 into b;
end;
(2) 调用
/**这儿的@a001、@b001变量只是用来存储结果*/
call MYTEST1(@a001,@b001); //第三步:从创建的存储过程中传出,调用的时候,分别把参数a、b赋值给变量@a001、@b001
(3) 查看执行结果
select @a001;
2. 例子二:in参数
(1) 创建
create proceduce MYTEST2( in x_name varchar ,out x_age int) //第二步:‘张三’传给参数x_name
begin
select age from 表名 into x_age where name=x_name; //第三步:参数传给过程体
end;
(2)调用
/**这儿的@a001、@b001变量只是用来存储结果*/
call MYTEST2('张三',@age001); //第一步:调用时传入‘张三’
(3)查看执行结果
select @age001;
七、存储过程中加入条件和处理程序
(1)定义条件
declare condition 条件名称 for 条件值;
条件值:
- SQLSTATE ‘错误信息-5位数' 如SQLSTATE‘48000’
- 错误代码 如2199
(2)定义处理程序
declare 处理方式 HANDLER FOR 判断值;
处理方式:
- CONTINUE:遇到错误时,不进行处理,继续向后执行;
- EXIT:遇到错误时,立刻退出程序;
- UNDO:遇到错误时,撤回之前的操作
判断值:
- 条件名称
- SQLSTATE ‘错误信息-5位数' 如SQLSTATE‘48000’
- SQLWARNING 所有以01开头的SQLSTATE错误代码
- NOT FOUND 所有以02开头的SQLSTATE错误代码
- SQLEXCEPTION 所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码
- 错误代码 如2199
八、存储过程中加入控制流程
(1)有哪些控制流程语句
IF语句、CASE语句、LOOP语句、LEAVE语句、ITERATE语句、REPEAT语句和WHILE语句
(2)流程详情
1. IF语句
例子:存储过程的过程体如下
BEGIN
DECLARE x INT DEFAULT 0;
SET x = 100;
IF x < 100 THEN SELECT 'x < 100'; //将在控制台输出打印'x<100'
ELSEIF x = 100 THEN SELECT 'x = 100';
ELSE SELECT 'x > 100';
END IF;
END
2. CASE语句
例子:存储过程的过程体如下
BEGIN
DECLARE x INT DEFAULT 0;
SET x = 100;
CASE x
WHEN 0 THEN SELECT 'x = 0';
WHEN 100 THEN SELECT 'x = 100';
ELSE SELECT 'x <> 0 and x <> 100';
END CASE;
END
3. LOOP语句(与LEAVE语句、ITERATE语句)
例子:存储过程的过程体如下
BEGIN
DECLARE x INT DEFAULT 0;
自定义标签名字1: LOOP
SET x = x + 1;IF x = 50 THEN ITERATE 标签1; //跳过本次循环,进入下次循环
IF x >= 100 THEN LEAVE 标签1; //退出循环
END IF;
END LOOP 自定义标签名字1;
SELECT x;
END
4. REPEAT语句
例子:存储过程的过程体如下
BEGIN
DECLARE x INT DEFAULT 0;
自定义标签名字1: REPEAT
SET x = x + 1;
UNTIL x >= 10 //until后面的条件为真时,退出循环
END REPEAT 自定义标签名字1;
SELECT x;
END
5. WHILE语句
例子:存储过程的过程体如下
BEGIN
DECLARE x INT DEFAULT 0;
自定义标签名字1: WHILE x < 10 DO //while后面的条件为真时,执行循环
SET x = x + 1;
END WHILE 自定义标签名字1;
SELECT x;
END
九、管理存储过程
查看
show create proceduce 存储过程名字; //查看创建代码
show procedure status; //查看所有存储过程的状态信息
show proceduce status like '存储过程名字—模糊匹配%'; //查看指定存储过程的状态信息
修改
(1)修改存储过程属性
语法:alter proceduce 属性;
例子:alter proceduce MODIFIES SQL DATA SQL SECURITY INVOKER;
属性有哪些?
NO SQL ——不含SQL
CONTAINS SQL ——含 SQL,不读、写数据
READS SQL DATA ——要读
MODIFIES SQL DATA ——要写
SQL SECURITY { DEFINER |INVOKER } ——指明谁有权限执行
- DEFINER——只有定义者能执行
- INVOKER——调用者都可以执行
COMMENT '注释内容'——添加注释信息
删除
drop proceduce 【if exits】存储过程名字; //删除
本文详细介绍了数据库存储过程的概念、好处、创建与调用语法,包括带参数的存储过程示例,以及如何在存储过程中添加条件、处理程序和控制流程。通过具体的IF、CASE、LOOP等语句的应用,展示了存储过程的灵活性和实用性。此外,还阐述了如何管理和修改存储过程。
2012

被折叠的 条评论
为什么被折叠?



