4.函数(存储函数)
函数,也称存储函数,必须返回一个数据(值)。
注意事项:1.在函数内,可以有各种变量和流程控制的使用
2.在函数内,可以有各种增删改语句
3.在函数内,不可以用select或其他“返回结果集”的语句
定义形式:
Createfunction 函数名(形参1 类型1,形参2 类型2,…)
Returns返回类型
Begin
//函数体
Return XX;
End
调用形式:跟调用内部函数一致
比如:
Selectnow(),8+3 as f2,func();//now是内部函数,func自定义函数
或在语句中使用:Set @v1=func();
举例:
Create functiongetMaxValue(p1 float,p2 float,p3 float)
Returns float
Begin
Declare result float;
If(p1>=p2 and p1>=p3) then
Begin
Set result=p1;
End;
Else if(p2>=p1 and p2>=p1) then
Begin
Set result=p2;
End;
Else
Begin
Set result=p3;
end
End if;
Return result ;
End
//在cmd执行该代码,需要更换“语句结束符”: delimiter ///
调用:select now(),getMaxValue(1.2,2.3,3.4);
删除函数:drop function 函数名;
5.存储过程procedure:其本质还是函数,但其规定不能有返回值;
定义形式:
Createprocedure 存储过程名(【in/out/inout】形参1 类型1,【in/out/inout】形参2 类型2,…)
Begin
//函数体
End
说明:(1)in默认可省略,用于设定该变量是用来“接受实参数据”的,即传入
(2)out,用于设定该变量是用来“存储过程中的数据”的,即传出,函数中必须对他赋值
(3)inout,是in和out的结合,具有双向作用
(4)对于out和inout设定,对应的实参必须是一个变量,因为该变量用于接收传出的数据。
例如:
Create procedure insert_getData(p1 int ,p2tinyint, p3 bigint)
Begin
Insert intotab_int(f1,f2,f3)values(p1,p2,p3);
Select * fromtab_int order by f1 desc limit 0,3;
End;
调用存储过程
Call 存储过程名 (实参1,实参2,…)
应该是自在非编程环境中的调用,如call insert_getdata(21,31,41);
例如:
Create procedure pro1(in p1 int ,out p2tinyint, inout p3 bigint)
Begin
Set p2=p1*2;
Set p3=p3+p1*3;
Insert into tab_int(f1,f2,f3)values(p1,p2,p3);
End;
调用函数:
Set @s3=3;
Call pro1(1,@s2,@s3);
Select @s2,@s3;
删除存储过程名
Drop procedure 存储过程名;
Php中使用存储函数和存储过程
<?php
//调用存储函数
$v1=$_POST[‘a’];
$v2=$_POST[‘b’];
$sql=”insert into tab1(id,f2,f3) values (null,now(),func($v1,$v2))”;
$result=mysql_query($sql);
//调用存储过程
$v1=$_POST[‘a’];
$v2=$_POST[‘b’];
$v3=$_POST[‘c’];
$sql=”call insert_user($v1,$v2,$v3);”;//insert_user()是一个存储过程,带3个参数,会将3个参数数据写入某个表中
$result=mysql_query($sql);
//使用存储过程返回结果集
$v1=$_GET[‘id’];
$sql=”call Get_User_Info($v1);”;
$result=mysql_query($sql); //得到的结果集
?>