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


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