存储过程和函数

1.概念。

-事先经过编译并存储在数据库中的一段sql语句的集合。

2.区别。

-函数必须有返回值,存储过程没有。

-函数参数只有in,存储过程参数有in ,out ,inout。

3.优点。

-存储过程提高数据库执行效率,存储过程只在创建时候编译,sql语句每执行一次就编译一次。

-简化复杂操作,结合事务一起封装。

-复用性。

-安全性高,可指定存储过程的使用权。

4.创建与调用

-存储过程。

-将语句的;号改为//号,//就被传递到服务器而不是被sql自己编译。

-例子

//创建存储过程

 delimiter //

 create procedure pro(out result int)

 begin

 //执行语句

 select count(id) into result from employer; //将查询结果放到result中。

 end //

 delimiter;

//调用存储过程。

 call pro(@a);

 select @a; //显示结果。


-函数。

-将;号改为$$号即可

-例子

//创建函数

delimiter$$

create function fun(s char(20)) returns char(20)

return contact('hello',s,'!');

$$ 

//调用函数

delimiter;

select fun('function1');

5 .查看

//查看定义

-show create  procedure pro;

//查看状态

-show procedure status;

6.删除

一次只能删除一个存储过程或函数。

-drop procedure if exists pro ;

7.变量的使用

-变量的定义:局部变量作用域在begin和end之间,可以在嵌套块中使用,在复合语句和任何其他语句的前面定义。用户变量是在客户端中定义的,且只能被该客户使用,当客户端退出时候,该客户端连接的所有变量将自动释放。

-例子:

delimiter //

create procedure pro2();

begin

declare pro_name varchar(20);

set pro_name ='durant';

insert into department (name) values(pro_name);

end //

delimiter ;

//执行

 call pro2();

8.流程控制

-可配合存储过程一起使用。

-例子(if 语句)

delimiter $$

create procedure pro3(int param int);

begin 

declare var1 int;

set var1=param+1;

if var1>6 then

select * from employer where name like '%s';

else 

select * from employer where name like 's%';

end if;

end $$

//使用用户变量

set @p=8;

$$

call pro3(@p);

$$

-例子(case 语句)

create procedure pro4(in param int)

begin

case param

when 1 then

update employer set salary =sarary*1.1;

when 2 then 

update employer set salary =salary*1.2;

else 

update employer set salary=salary*1.3;

end case;

end $$

delimiter;

set @m=3;

call pro4(@m);

-例子(loope语句)

delimiter $$

create procedure pro5(int param int);

begin 

label 1: loop

set param=param+1;

if param<10 then

iterate label 1;//跳过此次循环。

end if;

leave label 1;//退出label 1;

end loop label 1;

end $$



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值