mysql函数创建与使用_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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值