一、定义
例如:
客户----服务器 进行信息交流(数据库)
1) insert into
2) update
3) select
优点:1、批处理,减少客户和服务器之间的交流次数;
2、服务器端运行,移植性好;
3、安全要求高的行业;
4、包含流程控制结构的SQL语句的集合
二、创建存储过程
1、基本应用
语法格式:
create database
create table
存储函数
;---每条语句的结束
声明新的结束符(任选,避免在MySQL环境下有特殊含义)
delimiter(分隔符) $$
delimiter //
delimiter ;//
create procedure(过程) p_name(in c_name 数据类型)
[特征描述1、使用什么语言创建存储过程2、结果的确定性3、4、权限
5、注释]
SQL语句集合(一条,多条)
例如:
Create procedure p1() select * from t2;
Create procedure p1()
Begin
流程控制结构;
SQL语句集合;
end //
2、参数的应用
IN 输入形参参数的使用
set @x=3;
select @x;
调用必须有对应的实参(类型、数量)将信息带入到存储过程
create procedure p10(IN para1 int) set @x=para1;
create procedure p10(para1 int) set @x=para1;
call p10(18);
select @x;
用户定义变量:声明开始set @x=3;
到断开连接结束
不能和其他用户共享
作用域:
存储过程的局部变量:临时结果
作用范围:从声明位置开始,到end结束
语法格式
1) 分步
declare(声明) var_name type;
var_name初值是null
set var_name=值;
2) Declare var_name type default 值;
3) Declare v1,v2 int;
Set v1=5,v2=8;
OUT 输出形参的使用\
用一个变量(实参位置)保存存储过程中返回的结果
Create procedure p14(OUT para1 int)
begin
set para1=10;
end//
错误的:
call p14(x);
select x;
正确的:
call p14(@x);
select @x;
select @y:=@x+1;
例如:函数
Function fun1()
{
。。。。
Return 32;
}
$name=fun1();
$a=$name+1;
3、嵌套
Create procedure p15()
Begin
Declare v1 char(10) default’ ‘outer;
Begin
Declare v1 char(10) default ‘inner’;
Select v1;
End;
Select v1;
End//
三、流程控制结构
第一组:条件分支结构
IF语句
CASE 语句
语法:
IF 条件1 THEN 语句集合
【ELSEIF 条件2 THEN 语句集合】
【ELSE 语句集合】
END IF; 注意有空格
注意:
形参中的变量如果和存储过程中的局部变量同名,会“覆盖”;
形参变量在存储过程中无大小写的要求;
CASE
语法
Case 变量
When 变量取值1 then 语句集合
When 变量取值2 then 语句集合
Else 语句集合
End case;
Case
When 变量与值1表达式 then 语句集合
When 变量与值2表达式 then 语句集合
Else 语句集合
End case;
。。。。。。
IF str = ‘M’ then
set sex=‘男’;
ELSEIF str=‘F’then
Set sex=‘女’;
ELSE
Set sex=‘无’;
END IF;
。。。。。
循环结构
While….END WHILE
LOOP…END LOOP
REPEAT…END REPEAT
GOTO(不推荐使用,流程混乱,淘汰)
Create procedure p16()
Begin
Declare v int;
Set v=0;
While v<5 do ------------循环的入口(必须满足的条件)
Insert into t1 values(v);
Set v=v+1; -------------循环的出口(退出循环的条件)
End while;
End//
Call p16();//
Select * from t1;//
提醒:执行结束后的系统返回是针对最后一条insert语句;
Create procedure p17()
Begin
Declare v int;
Set v=0;
Repeat
Insert into t1 values(v);
Set v=v+1; ----------出口条件
Until v>5; ----------入口条件
End repeat;
End//
Create procedure p18()
Begin
Declare v int;
Set v=0;
Loop_label:LOOP
Insert into t1 values(v);
Set v=v+1;
If v>5 then
Leave loop_label;
End if;
End loop;
End//
删除存储过程
Drop procedure 名;
四、select …into 变量列表
只能应用在存储过程
Create procedure p19(out para1 char(20))
Begin
Select s1 into para1 from t1;
End//
Select 返回结果:表、列、行、值
游标(指针)?
步骤:
创建游标;declare
打开游标;open
获取记录;fetch
关闭游标;close