萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql function函數創建與應用方法

mysql function函數創建與應用方法

這些語句創建存儲子程序。要在MySQL 5.1中創建子程序,必須具有CREATE ROUTINE權限,並且ALTER ROUTINE和EXECUTE權限被自動授予它的創建者。如果二進制日志功能被允許,你也可能需要SUPER權限,請參閱20.4節,“存儲子程序和觸發程序的二進制日志功能”。

默認地,子程序與當前數據庫教程關聯。要明確地把子程序與一個給定數據庫關聯起來,可以在創建子程序的時候指定其名字為db_name.sp_name。

如果子程序名和內建的SQL函數名一樣,定義子程序時,你需要在這個名字和隨後括號中間插入一個空格,否則發生語法錯誤。當你隨後調用子程序的時候也要插入。為此,即使有可能出現這種情況,我們還是建議最好避免給你自己的存儲子程序取與存在的SQL函數一樣的名字。

由括號包圍的參數列必須總是存在。如果沒有參數,也該使用一個空參數列()。每個參數默認都是一個IN參數。要指定為其它參數,可在參數名之前使用關鍵詞 OUT或INOUT

注意: 指定參數為IN, OUT, 或INOUT 只對PROCEDURE是合法的。(FUNCTION參數總是被認為是IN參數)

RETURNS字句只能對FUNCTION做指定,對函數而言這是強制的。它用來指定函數的返回類型,而且函數體必須包含一個RETURN value語句

 

mysql教程> delimiter $$
mysql>
mysql> CREATE FUNCTION myFunction(
    ->         in_title VARCHAR(4),
    ->         in_gender CHAR(1),
    ->         in_firstname     VARCHAR(20),
    ->         in_middle_initial CHAR(1),
    ->         in_surname       VARCHAR(20))
    ->
    ->   RETURNS VARCHAR(60)
    -> BEGIN
    ->   DECLARE l_title               VARCHAR(4);
    ->   DECLARE l_name_string         VARCHAR(60);
    ->
    ->   IF ISNULL(in_title)  THEN
    ->      IF in_gender='M' THEN
    ->         SET l_title='Mr';
    ->      ELSE
    ->         SET l_title='Ms';
    ->      END IF;
    ->   END IF;
    ->
    ->   IF ISNULL(in_middle_initial) THEN
    ->      SET l_name_string=CONCAT(l_title,' ',in_firstname,' ',in_surname);
    ->   ELSE
    ->      SET l_name_string=CONCAT(l_title,' ',in_firstname,' ',
    ->                           in_middle_initial,' ',in_surname);
    ->   END IF;
    ->
    ->   RETURN(l_name_string);
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> delimiter ;
mysql>
mysql> select myFunction('Mrs','M','First','Middle','Last');
+-----------------------------------------------+
| myFunction('Mrs','M','First','Middle','Last') |
+-----------------------------------------------+
| NULL                                          |
+-----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql>
mysql>
mysql> select myFunction(null,'M','First','Middle','Last');
+----------------------------------------------+
| myFunction(null,'M','First','Middle','Last') |
+----------------------------------------------+
| Mr First M Last                              |
+----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

mysql>
mysql> drop function myFunction;
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql>


注:可能受到系統影響

受影響系統:
MySQL AB MySQL 4.1.5
MySQL AB MySQL 4.1.4
MySQL AB MySQL 4.1.3-beta
MySQL AB MySQL 4.1.3-0
MySQL AB MySQL 4.1.2-alpha
MySQL AB MySQL 4.1.0-alpha
MySQL AB MySQL 4.1.0-0
MySQL AB MySQL 4.0.9-gamma
MySQL AB MySQL 4.0.9
MySQL AB MySQL 4.0.8-gamma
MySQL AB MySQL 4.0.8
MySQL AB MySQL 4.0.7-gamma
MySQL AB MySQL 4.0.7
MySQL AB MySQL 4.0.6
MySQL AB MySQL 4.0.5a
MySQL AB MySQL 4.0.5
MySQL AB MySQL 4.0.4
MySQL AB MySQL 4.0.3
MySQL AB MySQL 4.0.21
MySQL AB MySQL 4.0.20
MySQL AB MySQL 4.0.2
MySQL AB MySQL 4.0.18
MySQL AB MySQL 4.0.15
MySQL AB MySQL 4.0.14
MySQL AB MySQL 4.0.13
MySQL AB MySQL 4.0.12
MySQL AB MySQL 4.0.11-gamma
MySQL AB MySQL 4.0.11
MySQL AB MySQL 4.0.10
MySQL AB MySQL 4.0.1
MySQL AB MySQL 4.0.0
不受影響系統:
MySQL AB MySQL 4.1.10a
MySQL AB MySQL 4.0.24

copyright © 萬盛學電腦網 all rights reserved