首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法导入MYSQL函数-错误1064 (42000)

问无法导入MYSQL函数-错误1064 (42000)
EN

Stack Overflow用户
提问于 2010-10-01 13:35:19
回答 1查看 3.4K关注 0票数 0

我正在试图理解为什么下面的失败,我无法看到它。我们开发服务器上的phpMyAdmin正是这样生成的,但是当我尝试导入它时,我遇到了一个奇怪的解析(?)错误。

代码语言:javascript
复制
mysql> DELIMITER $$
mysql>
mysql> --
mysql> -- Functions
mysql> --
mysql> DROP FUNCTION IF EXISTS `get_class_nextsession`$$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE DEFINER=`myusername`@`localhost` FUNCTION `get_class_nextsession`(class_id INT) RETURNS datetime
    ->     READS SQL DATA
    -> BEGIN
    -> DECLARE nextsession,startdate,runningdate,enddate DATETIME;
    -> SET nextsession= '-';
    -> SELECT  MIN(CS.start_datetime) INTO startdate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id Group by C.id Limit 0,1;
    -> IF startdate >= NOW() THEN
    -> RETURN startdate;
    -> ELSE
    -> SELECT  CS.start_datetime INTO runningdate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id and (NOW() between start_datetime and end_datetime ) Limit 0,1;
    -> IF runningdate IS NOT NULL THEN
    -> RETURN runningdate;
    -> ELSE
    -> SELECT  MAX(CS.end_datetime) INTO enddate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id Group by C.id Limit 0,1;
    -> IF enddate < NOW() THEN
    -> RETURN enddate;
    -> ELSEIF enddate >= NOW() THEN
    -> SELECT  MIN(CS.start_datetime) INTO startdate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id and CS.start_datetime > NOW() Group by C.id Limit 0,1;
    ->
Display all 1866 possibilities? (y or n)
    ->  startdate;
    ->
Display all 1866 possibilities? (y or n)
    -> D IF;
    -> END IF;
    -> END IF;
    -> RETURN nextsession;
    -> END$$
ERROR 1064 (42000): 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 ';
D IF;
END IF;
END IF;
RETURN nextsession;
END' at line 19
mysql>
mysql>

最新进展情况1

这起作用了

代码语言:javascript
复制
mysql> DELIMITER $$
mysql>
mysql> DROP FUNCTION IF EXISTS `get_class_nextsession`$$
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> CREATE DEFINER=`myusername`@`localhost` FUNCTION `get_class_nextsession`(class_id INT) RETURNS datetime
    ->     READS SQL DATA
    -> BEGIN
    -> RETURN nextsession;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

这起作用了

代码语言:javascript
复制
mysql>
mysql> DROP FUNCTION IF EXISTS `get_class_nextsession`$$
Query OK, 0 rows affected (0.00 sec)

mysql>
mysql> CREATE DEFINER=`myusername`@`localhost` FUNCTION `get_class_nextsession`(class_id INT) RETURNS datetime
    ->     READS SQL DATA
    -> BEGIN
    -> DECLARE nextsession,startdate,runningdate,enddate DATETIME;
    -> RETURN nextsession;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

这是行不通的--注意我是如何将查询/语句简化为基本语句的。

代码语言:javascript
复制
mysql> DROP FUNCTION IF EXISTS `get_class_nextsession`$$
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> CREATE DEFINER=`myusername`@`localhost` FUNCTION `get_class_nextsession`(class_id INT) RETURNS datetime
    ->     READS SQL DATA
    -> BEGIN
    -> DECLARE nextsession,startdate,runningdate,enddate DATETIME;
    -> SET nextsession= '-';
    -> SELECT  MIN(start_datetime) INTO startdate FROM site_class_schedule;
    -> IF startdate >= NOW() THEN
    -> RETURN startdate;
    -> ELSE
    -> END IF;
    -> RETURN nextsession;
    -> END$$
ERROR 1064 (42000): 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 'END IF;
RETURN nextsession;
END' at line 10
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-10-04 10:47:44

啊哈!

绝对是一个“不寻常”的错误,其中‘没有’是错误的!我所面临的问题是由于过多的选项卡被生成或放置在原来的函数创建中!这两个连续的\t命令中断mysql提示符上的数据输入流,并让mysql问询。

代码语言:javascript
复制
 Display all 1866 possibilities? (y or n)

此外,当我在这里复制粘贴时,我正在粘贴与MYSQL命令提示符交互的最后输出,而不是我实际放置的“在那里”!

代码语言:javascript
复制
DROP FUNCTION IF EXISTS `get_class_nextsession`$$
CREATE DEFINER=`myusername`@`localhost` FUNCTION `get_class_nextsession`(class_id INT) RETURNS datetime
    READS SQL DATA
BEGIN
DECLARE nextsession,startdate,runningdate,enddate DATETIME;
SET nextsession= '-';
SELECT  MIN(CS.start_datetime) INTO startdate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id Group by C.id Limit 0,1;
IF startdate >= NOW() THEN
RETURN startdate;
ELSE    
SELECT  CS.start_datetime INTO runningdate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id and (NOW() between start_datetime and end_datetime ) Limit 0,1;
IF runningdate IS NOT NULL THEN
RETURN runningdate;
ELSE
SELECT  MAX(CS.end_datetime) INTO enddate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id Group by C.id Limit 0,1;
IF enddate < NOW() THEN
    RETURN enddate;
ELSEIF enddate >= NOW() THEN
SELECT  MIN(CS.start_datetime) INTO startdate FROM site_class_schedule AS CS INNER JOIN site_class AS C ON (C.id=CS.class_id) WHERE CS.class_id=class_id and CS.start_datetime > NOW() Group by C.id Limit 0,1;
            RETURN startdate; ****ISSUE WITH MORE THAN 2 TABS****
        END IF; ****ISSUE WITH MORE THAN 2 TABS****
    END IF;
END IF;
RETURN nextsession;
END$$
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3839665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档