2013-04-18 38 views
0

我有一个存储过程,在我的本地PC语法上可以接受,我有MySQL工作台5.2.44,我认为我的本地版本的MySQL是5.5.29由文件夹名称判断。下面是代码,我已经减少到最低限度为了说明mysql存储过程语法不一致

DELIMITER $$ 

CREATE PROCEDURE `usp_insert_booking_test_2`(
     IN p_dtmTimeSlot DATETIME 
    ) 

BEGIN 

    INSERT INTO tblBookings (dtmTimeSlot) 
    SELECT p_dtmTimeSlot 
    FROM tblBookings 
    WHERE NOT EXISTS (SELECT * FROM tblBookings WHERE dtmTimeSlot = p_dtmTimeSlot) LIMIT 1; 

END$$ 

正如你所看到的,我想确保我不会在同一个时间段创建两个预订。是的,我在表上也有一个约束来做到这一点。腰带&牙套。当我尝试在远程主机(运行MySQL版本5.1.68-cll)上添加此过程时,它说

#1064 - 您的SQL语法错误;检查与您的MySQL服务器版本对应的手册,以便在第12行“'附近使用正确的语法。

第12行是WHERE NOT EXISTS行。我试图删除限制1,这没有什么区别。有没有办法编写查询,以便MySQL 5.1能接受它?

+1

的最后一行应该是'END $$'(太空任务)而行的最后一个行后丢失: 'DELIMITER;' – Kovge 2013-04-18 07:44:07

+1

的空间END'后'失踪 同样的问题:HTTP:/ /stackoverflow.com/questions/1102109/mysql-delimiter-syntax-errors – Kovge 2013-04-18 07:45:30

回答

0

使用此。

DELIMITER $$ 

CREATE PROCEDURE `usp_insert_booking_test_2`(
    IN p_dtmTimeSlot DATETIME 
) 

BEGIN 

INSERT INTO tblBookings (dtmTimeSlot) 
SELECT p_dtmTimeSlot 
FROM tblBookings 
WHERE NOT IN (SELECT * FROM tblBookings WHERE dtmTimeSlot = p_dtmTimeSlot LIMIT 1); 

END $$ 
DELIMITER ; 

这里somevalue是你想要插入。

+0

这两个建议都无效。建议的答案将一个SQL语句分解为两个无关的语句,这些语句完全改变了语义。建议缺少空格不能解决错误。 – DJDave 2013-04-18 10:31:16

+0

@ user1280840请检查我的更新答案。 – 2013-04-18 13:08:08

0

我需要添加

DELIMITER;

到所示的代码结束。不知道为什么。