關於MySQL的存儲函數(自定義函數)的定義和使用方法詳解

存儲函數sql

什麼是存儲函數: 封裝一段sql代碼,完成一種特定的功能,返回結果。ide

存儲函數的語法:函數

create function 函數([函數參數[,….]]) Returns 返回類型
 
   Begin
 
    If(
 
       Return (返回的數據)
 
     Else
 
       Return (返回的數據)
 
     end if;
 
   end ;

例如: create function count_news(hits int) returns int
spa

與存儲過程返回參數不一樣的是存儲函數在定義時沒用直接聲明哪一個變量是返回參數,而只是使用了returns聲明瞭返回參數所屬的數據類型,返回參數是在函數體中使用return返回要返回的數據變量的形式來表示的。這就須要注意的是:
存儲函數只支持輸入參數,而且輸入參數前沒有IN或INOUT..net

存儲函數中的限制code

流控制(Flow-of-control)語句(IF, CASE, WHILE, LOOP, WHILE, REPEAT, LEAVE,ITERATE)也是合法的. 
orm

變量聲明(DECLARE)以及指派(SET)是合法的. 
htm

容許條件聲明. 
ip

異常處理聲明也是容許的. 
it

可是在這裏要記住函數有受限條件:不能在函數中訪問表.所以在函數中使用如下語句是非法的。 

ALTER 'CACHE INDEX' CALL COMMIT CREATE DELETE 
DROP 'FLUSH PRIVILEGES' GRANT INSERT KILL 
LOCK OPTIMIZE REPAIR REPLACE REVOKE 
ROLLBACK SAVEPOINT 'SELECT FROM table' 
'SET system variable' 'SET TRANSACTION' 
SHOW 'START TRANSACTION' TRUNCATE UPDATE

存儲函數與存儲過程的區別

1、 存儲函數有且只有一個返回值,而存儲過程不能有返回值。

2、 函數只能有輸入參數,並且不能帶in, 而存儲過程能夠有多個in,out,inout參數。

3、 存儲過程當中的語句功能更強大,存儲過程能夠實現很複雜的業務邏輯,而函數有不少限制,如不能在函數中使用insert,update,delete,create等語句;存儲函數只完成查詢的工做,可接受輸入參數並返回一個結果,也就是函數實現的功能針對性比較強。

4、 存儲過程能夠調用存儲函數。但函數不能調用存儲過程。

5、 存儲過程通常是做爲一個獨立的部分來執行(call調用)。而函數能夠做爲查詢語句的一個部分來調用。

實例1:

Id

Name 

QQ

phone

秦雲 

10102800

13500000

在路上

10378

13600000

LEO

10000

  13900000


Id

Name 

上機時間

管理員

1

秦雲 

2004-1-1 

李大偉

2

秦雲

2005-1-1

馬化騰

在路上 

2005-1-1 

馬化騰

秦雲

2005-1-1

李大偉

5

在路上

2005-1-1

李大偉


實現目的:

從表1中取全部人員列表,從表2中取上機次數和管理員.

上機人員名單    上機次數             管理員
秦雲               3             李大偉,馬化騰,李大偉 
在路上           2            馬化騰,李大偉 
LEO              0     


轉自:https://www.jb51.net/article/136703.htm

相關文章
相關標籤/搜索