MySQL自定义函数出现的问题

DROPFUNCTIONIFEXISTSmyFunction;delimiter$$CREATEFUNCTIONmyFunction()RETURNSVARCHAR(4)... DROP FUNCTION IF EXISTS myFunction;
delimiter $$
CREATE FUNCTION myFunction() RETURNS VARCHAR(4)
BEGIN
DECLARE first_name_list CHAR(32) DEFAULT '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨';
DECLARE last_name_list CHAR(20) DEFAULT '甲乙丙丁戊己庚辛壬癸';
DECLARE full_name CHAR(2);

SET full_name =
CONCAT(SUBSTRING(first_name_list, FLOOR(RAND()*16+1), 1),
SUBSTRING(last_name_list, FLOOR(RAND()*10+1), 1));
RETURN full_name;

END $$
delimiter ;

DROP FUNCTION IF EXISTS dotest;
delimiter $$
CREATE FUNCTION dotest()
BEGIN
DECLARE i INT;
SET i = 10;
WHILE i <= 10 DO
SELECT myFunction();
SET i = i + 1;
END WHILE;
END $$
delimiter ;

SELECT dotest();

代码不能格式化, 大侠们将就着看一下吧...
第一个函数执行没问题, 第二个报错如下:
[SQL]
DROP FUNCTION IF EXISTS dotest;

受影响的行: 0
时间: 0.000s
[SQL]

CREATE FUNCTION dotest()

BEGIN
DECLARE i INT;
SET i = 10;
WHILE i <= 10 DO
SELECT myFunction();
SET i = i + 1;
END WHILE;
END ;
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN
DECLARE i INT;
SET i = 10;
WHILE i <= 10 DO
SELECT myFunction();
' at line 2
展开
 我来答
百度网友0f37e23c0
2013-10-13 · TA获得超过1543个赞
知道大有可为答主
回答量:1070
采纳率:50%
帮助的人:1296万
展开全部
你第二个函数 CREATE FUNCTION dotest() 后 缺少 return 数据类型。 没有返回数据类型。

建议改成
CREATE FUNCTION dotest() retun varchar(500)

或者改成存储过程

CREATE PROCEDURE dotest()
begin

....

END $$
寿山石zx
2013-10-15
知道答主
回答量:7
采纳率:0%
帮助的人:5.5万
展开全部
第二个用的是function,要求必须有返回值CREATE FUNCTION dotest() retun varchar(500),按你的程序情况,建议使用存储过程procedure
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式