一、介绍
1、存储过程和函数: 事先经过编译并存储在数据库中的一段SQL语句的集合 ;
2、优点:
1)减少数据在数据库和应用程序(例如Java项目)之间的传输,有利于提高数据处理效率
2)处理逻辑都封装在数据库端,调用者不需要了解中间的处理逻辑,一旦处理逻辑发生改变,只需要修改存储过程即可,但对调用者的程序完全没有影响;
3、缺点:存储过程和函数可以将数据的处理放在数据库服务器上进行,避免将大量的结果集传输给客户端 ,减少数据的传输,但是在数据库服务器上进行大量的复杂运算也会占用服务器的CPU,造成数据库服务器的压力,所以不要在存储过程和函数中进行大量的复杂运算,应该尽量将这些运算操作分摊到应用服务器上执行
4、区别:
a.函数必须有返回值
b.存储过程的参数可以使用in输入参数,out输出参数,inout类型(可以作为输入参数和输出参数),而函数的参数只能是in 类型;
二、存储过程和函数的相关操作
1、eg1
程序1:无参的存储过程
delimiter //
drop procedure if exists p1;
//
create procedure p1()
begin
select now();
end;
//
调用存储过程 程序:
call p1(); //
|
2、eg2
有参数的存储过程
drop procedure if exists p2;
//
create procedure p2(in a int, out b int)
begin
set b = a*a;
end;
//
call p2(5, @v1); //
select @v1; //
3、存储过程实例
delimiter //
drop procedure if exists p1;
//
create procedure p1()
begin
declare var1 int default 0;
set var1 = 1;
while var1 <700000 DO
set var1 = var1 + 4;
INSERT INTO oyk_record_charging (organization_id,account_uid, cabinet_uid,charging_type, charging_status, return_battery_id, get_battery_id, return_box_id, get_box_id)
VALUES('23',REPLACE(UUID(),'-',''),REPLACE(UUID(),'-',''),'1','-1','G0014802512BLD0190703001','G0014802512BLD0190703002','184','183');
end while;
select var1;
end;
//
call p1();
//
3、eg3
创建函数
create function fn1(a int) --函数可以replace,存储过程不可以
returns varchar(255) --定义返回类型
begin
declare r int;
set r = a*a;
return r;
end;