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); //得到的结果集 ?>