语法:Create function function_name(参数列表)returns返回值类型
函数体 函数名,应合法的标识符,不应与系统关键字冲突。
一个函数应该属于某个数据库,可以使用db_name.funciton_name的形式执行当前函数所属数据库,否则为当前数据库。
参数部分,由参数名和参数类型组成。
返回值类类型.注意,一定要有return返回值语句。
创建第一个函数:
mysql> DROP FUNCTION IF EXISTS SP_FUNC_DBDH_ONE -- 删掉已存在函数 DELIMITER && -- 定义分隔符,必须要有 ,本例为 && 可以为得数字符,例如: $$,%%,**
mysql> CREATE FUNCTION SP_FUNC_DBDH_ONE( PARA_VAR varchar(30)) -- 多个参数用,分割 参数
的类型必须是mysql列存在的类型
-> RETURNS VARCHAR(100) -- 指定返回值类型,如果你不确定返回
文本长度,可以使用text
-> BEGIN
-> DECLARE NAYIBU_FIR VARCHAR(30) DEFAULT 'THIS IS MY FIRST,'; -- 定义变量,设置默认值
-> SET NAYIBU_FIR = concat(NAYIBU_FIR,PARA_VAR);
-> RETURN NAYIBU_FIR; -- 返回值
-> END $$
后面有你在前面定义的分割符号
Query OK, 0 rows affected (0.00 sec)
mysql> DELIMITER &&
调用自定义函数,输出结果如下:
mysql> SELECT SP_FUNC_DBDH_ONE('PROGRAM');
+------------------------------+
| SP_FUNC_DBDH_ONE('PROGRAM') |
+------------------------------+
| 'THIS IS MY FIRST, PROGRAM |
+------------------------------+
1 row in set (0.00 sec)
DELIMITER $$ -- 定义分隔符,必须要有 ,本例为 && 可以为得数字符,例如: $$,%%,** USE `topsale`$$ DROP FUNCTION IF EXISTS `func_getMaxIncentiveReward`$$ -- 删掉已存在函数 CREATE DEFINER=`root`@`%` FUNCTION `func_getMaxIncentiveReward`(z_product_line VARCHAR(100),z_monthly VARCHAR(100),country_id INT(11),z_qtyCompletion INT(11))
RETURNS INT(11) -- 指定返回值类型,如果你不确定返回文本长度,可以使用text
BEGIN
DECLARE z_maxIncentiveReward INT DEFAULT 0; -- 定义变量,设置默认值
SELECT MAX(inp.Amt_reward) INTO z_maxIncentiveReward FROM incentive_policy inp,user_login ul WHERE inp.product_line = z_product_line
AND inp.Expiration_date = z_monthly AND inp.user_id = ul.user_login_id AND ul.party_id=country_id AND inp.class_id = 2
AND inp.qty_completion_rate <= z_qtyCompletion;
RETURN z_maxIncentiveReward; -- 返回值
END$$ DELIMITER ;