1、基本定义
delimiter 自定义符号 -- 如果函数体只有一条语句, begin和end可以省略, 同时delimiter也可以省略
create function 函数名(形参列表) returns 返回类型 -- 注意是retruns
begin
函数体 -- 函数内定义的变量如:set @x = 1; 变量x为全局变量,在函数外面也可以使用
返回值
end
自定义符号
delimiter ;
示例:
-- 自定义函数
delimiter $$
create function myfun3(ia int, ib int) returns int
begin
return ia + ib;
end
$$
delimiter ;
2、需求
2.1 统计文章分类的数量,分类是树形结构,所以有一个先查询分类树形的级别的集合。使用的函数包括FIND_IN_SET
3、实例
DELIMITER $$
USE `hk`$$
DROP FUNCTION IF EXISTS `queryChildren`$$
CREATE DEFINER=`root`@`192.168.2.%` FUNCTION `queryChildren`(tId VARCHAR(4000)) RETURNS VARCHAR(4000) CHARSET utf8
BEGIN
DECLARE sTemp VARCHAR(4000) DEFAULT '$';
DECLARE sTempChd VARCHAR(4000) DEFAULT tId;
WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,',',sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM hk_filetype WHERE FIND_IN_SET(parentFileTypeId,sTempChd)>0;
END WHILE;
RETURN sTemp;
END$$
DELIMITER ;
4、在程序中的使用
<resultMap id="BaseResultMap" type="com.test.model.HkFiletype">
<id column="ID" jdbcType="VARCHAR" property="id"/>
<result column="HOSPITALCODE" jdbcType="VARCHAR" property="hospitalcode"/>
<result column="FILETYPENAME" jdbcType="VARCHAR" property="filetypename"/>
<result column="PARENTFILETYPEID" jdbcType="VARCHAR" property="parentfiletypeid"/>
<result column="sorting" jdbcType="INTEGER" property="sorting"/>
<result column="ISSO" jdbcType="INTEGER" property="isso"/>
<result column="CONFIRMDATE" jdbcType="TIMESTAMP" property="confirmdate"/>
<result column="USEREDITFLAG" jdbcType="INTEGER" property="usereditflag"/>
<association property="totals" javaType="integer" column="id" select="selectTotales">
</association>
</resultMap>
<select id="selectTotales" parameterType="string" resultType="integer">
SELECT
COUNT(1) AS totals
FROM
hk_file hkf
WHERE FIND_IN_SET(hkf.`annexTypeCode`,
(SELECT
queryChildren (
#{id}
)) )
</select>