CREATE FUNCTION <函数名> ( [ <参数1> <参数1类型> ],[ <参数2> <参数2类型>])
RETURNS <返回值类型>
BEGIN
函数体>
RETURN (<返回值>);
END
<
书写函数的主体,在BEGIN和END之间的部分是函数的主体,即函数的具体实现。
DECLARE <变量名> <变量类型> DEFAULT <默认值>;
SET <变量名>=<值>;
点击保存函数会被保存起来,同时格式会自动变化
如果书写错误会报错保存不了,修改错误后就可以保存了
Ps:这只是一个错误,还有别的错误
调用自定义的函数
除了新建函数以外,自定义函数也可以直接写在查询中,直接运行就可以创建
下面是一些应用实例:
自定义生成手机号
CREATE FUNCTION `generatePhone`() RETURNS char(11) CHARSET utf8
DETERMINISTIC
BEGIN
DECLARE head VARCHAR(100) DEFAULT '132,135,136,158,183';
DECLARE content CHAR(10) DEFAULT '0123456789';
DECLARE phone CHAR(11) DEFAULT substring(head, 1+(FLOOR(1 + (RAND() * 3))*4), 3);
DECLARE i int DEFAULT 1;
DECLARE len int DEFAULT LENGTH(content);
WHILE i<9 DO
SET i=i+1;
SET phone = CONCAT(phone, substring(content, floor(1 + RAND() * len), 1));
END WHILE;
RETURN phone;
END
随机生成姓名
CREATE FUNCTION generateName() RETURNS VARCHAR(3)
DETERMINISTIC
BEGIN
DECLARE xing VARCHAR(2056) DEFAULT '赵钱孙李周郑王冯陈楮卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤滕殷罗毕郝邬安常乐于时傅皮齐康伍余元卜顾孟平黄和穆萧尹姚邵湛汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董梁杜阮蓝闽席季麻强贾路娄危江童颜郭梅盛林刁锺徐丘骆高夏蔡田樊胡凌霍虞万支柯昝管卢莫经裘缪干解应宗丁宣贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁';
DECLARE ming VARCHAR(2056) DEFAULT '靖雁寻春恨山格光华国源宇晗昱涵润翰飞翰海昊乾浩博和安弘博鸿朗华奥华灿嘉慕坚秉建明紫山千琴恨天傲芙盼山怀蝶冰兰霜怜梦紫寒妙幼翠友巧听寒梦柏醉易访旋尔珍谷雪乐萱涵菡海莲傲蕾青槐冬儿易梦惜雪宛海之柔夏青亦瑶妙菡熠彤鸿煊博涛烨霖烨华煜祺智宸正豪昊然明杰诚立轩立辉峻熙弘文熠彤鸿煊烨霖彤曼易南莲紫翠雨寒易烟如萱若金鑫锦程瑾瑜鹏经赋景同靖琪君昊俊明季同开济凯安康成乐语力勤良哲理群茂彦敏博明达朋义彭泽鹏举濮存溥心璞瑜浦泽奇邃祥荣轩向珊慕灵以蕊寻雁映易雪柳孤岚笑山柏翠萱乐丹翠柔谷山之瑶冰露涛伟惜文香寒新柔语蓉海安夜蓉涵柏水桃醉蓝春儿语琴从彤傲晴语兰又菱碧彤元儿晓霜碧凡夏菡曼香若烟半梦雅绿冰蓝灵槐平安书翠翠风香巧代祺轩越泽浩宇瑾瑜皓轩擎苍擎宇志泽靖琪明诚高瑞轩弘文哲瀚雨泽鑫磊梦琪忆之桃慕青问兰尔岚元香初夏沛菡傲珊曼文乐菱痴珊恨玉云梦曼哲瀚鑫鹏致远春竹修杰嘉懿煜城懿轩烨伟睿渊楷从寒忆香觅波静曼凡旋以亦念露芷蕾千兰新波代真新蕾雁玉冷卉南寻真晓亦俊驰雨泽烨磊晟睿天佑文昊修洁黎昕远航旭尧鸿亦玉凌萱访卉怀亦笑蓝春翠靖柏夜蕾冰夏梦松书雪乐枫念薇霜海云凝天沛珊寒云冰旋宛儿绿真盼伟诚建辉晋鹏天磊绍辉泽洋明轩健柏煊昊强伟宸博超君浩子骞明辉鹏涛炎彬鹤轩越彬风华苑博伟泽';
DECLARE return_str VARCHAR(3) DEFAULT '';
-- 随机选取一个姓氏的字符
SET return_str = CONCAT(return_str, SUBSTRING(xing, FLOOR(1 + RAND() * (LENGTH(xing) / 3)), 1));
-- 随机选取一个名字的字符
SET return_str = CONCAT(return_str, SUBSTRING(ming, FLOOR(1 + RAND() * (LENGTH(ming) / 3)), 1));
-- 随机判断是否使用第二个名字的字符
IF RAND() > 0.400 THEN
SET return_str = CONCAT(return_str, SUBSTRING(ming, FLOOR(1 + RAND() * (LENGTH(ming) / 3)), 1));
END IF;
RETURN return_str;
END