mysql编程---存储函数、存储过程

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章