本质:mysql内置函数的一种扩展,本质上与mysql内置函数一样。
- 函数必要条件:
@1:参数(非必备);
@2:返回值;
模板:
create function function_name
returns
{string|integer|real|decimal}
routine_body(函数体)
关于函数体:
(1):函数体由合法的sql语句构成;
(2):函数体可以是简单的select或insert语句;
(3):函数体如果为复合结构,则使用begin...end语句;
(4):复合结构可以包含声明,循环,控制结构;
------------------------------------------------------我是分割线-------------------------------------------------
实例:
返回不带参数的函数:
CREATE FUNCTION f1() returns VARCHAR(20)
return NOW();
返回带参数的函数:
create FUNCTION ftest1(num1 SMALLINT,num2 SMALLINT)
RETURNS FLOAT(10,2)
RETURN (num1+num2)/2;
创建具有复合结构函数体的自定义函数:
DELIMITER $$
DROP FUNCTION IF EXISTS `itcast`.`cost` $$
CREATE FUNCTION `itcast`.`cutString`(s VARCHAR(255),n INT) RETURNS varchar(255)
BEGIN
IF(ISNULL(s)) THEN RETURN '';
ELSEIF CHAR_LENGTH(s)<n THEN RETURN s;
ELSEIF CHAR_LENGTH(S)=n THEN RETURN '相等';
ELSE RETURN CONCAT(LEFT(s,n),'...');
END IF;
END $$
DELIMITER ;
---------------------------------------------------------我是分割线------------------------------------------------
存储过程和自定义函数的区别:
存储过程实现的功能要复杂些,而函数的针对性更强;
存储过程可以返回多个值;函数只能有一个返回值;
存储过程一般独立的来执行;而函数可以作为其它sql语句的组成部分来出现(作用等同内置函数)。
自定义函数实用较少,存储过程实用较多