MySQL存儲過程和函數(4) - 存儲函數Stored Function

   存儲函數返回一個計算結果,該結果可以用在表達式裏。

1.定義語法

CREATE FUNCTION  sp_name ([ func_parameter[,...]])
      RETURNS  type
      [ characteristic ...]  routine_body
                                                                            
    func_parameter:
      param_name  type
                                                                        
type:
      Any valid MySQL data type
                                                                        
characteristic:
      LANGUAGE SQL
    | [NOT] DETERMINISTIC
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }
    | COMMENT ' string '
                                                                        
routine_body:
      Valid SQL procedure statement or statements


2.修改存儲函數:在不重建存儲函數的前提下,只能夠修改存儲函數的characteristic屬性。若需要改變存儲函數包含的語句和邏輯過程,則只能夠drop function後重新create。

ALTER FUNCTION func_name [characteristic …]
characteristic:
      COMMENT 'string'
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
    | SQL SECURITY { DEFINER | INVOKER }3.


3.刪除存儲函數:

DROP FUNCTION [IF EXISTS] func_name


4.查看存儲函數:顯示MySQL中所有數據庫中定義的存儲函數信息(可直接查詢mysql.proc表中type=’FUNCTION’的記錄)

SHOW FUNCTION STATUS


5.調用函數:能夠想調用系統函數般調用存儲函數

   存儲函數返回一個值,因此能夠放在任意表達式中使用。


6.用例

mysql> delimiter //
           
mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50)
      ->  RETURN CONCAT('Hello, ',s,'!');
      ->  //
Query OK, 0 rows affected (0.00 sec)
mysql> delimiter ;
mysql> SELECT hello('world');
+----------------+
| hello('world') |
+----------------+
| Hello, world!    |
+----------------+
1 row in set (0.00 sec)



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