1. 程式人生 > 資料庫 >關於MySQL的儲存函式(自定義函式)的定義和使用方法詳解

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

儲存函式

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

儲存函式的語法:

create function 函式([函式引數[,….]]) Returns 返回型別

  Begin

    If(

      Return (返回的資料)

    Else 

      Return (返回的資料)

    end if;

  end;

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

與儲存過程返回引數不同的是儲存函式在定義時沒用直接宣告哪個變數是返回引數,而只是使用了returns聲明瞭返回引數所屬的資料型別,返回引數是在函式體中使用return返回要返回的資料變數的形式來表示的。這就需要注意的是:

儲存函式只支援輸入引數,並且輸入引數前沒有IN或INOUT.

儲存函式中的限制

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

變數宣告(DECLARE)以及指派(SET)是合法的.

允許條件宣告.

異常處理宣告也是允許的.

但是在這裡要記住函式有受限條件:不能在函式中訪問表.因此在函式中使用以下語句是非法的。

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

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

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

二、 函式只能有輸入引數,而且不能帶in,而儲存過程可以有多個in,out,inout引數。

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

四、 儲存過程可以呼叫儲存函式。但函式不能呼叫儲存過程。

五、 儲存過程一般是作為一個獨立的部分來執行(call呼叫)。而函式可以作為查詢語句的一個部分來呼叫。

例項1:

Id

Name

QQ

phone

1

秦雲

10102800

13500000

2

在路上

10378

13600000

3

LEO

10000

13900000

Id

Name

上機時間

管理員

1

秦雲

2004-1-1

李大偉

2

秦雲

2005-1-1

馬化騰

3

在路上

2005-1-1

馬化騰

4

秦雲

2005-1-1

李大偉

5

在路上

2005-1-1

李大偉

實現目的:

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

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