mysql存储过程语法不一致

时间:2013-04-18 07:39:55

标签: mysql syntax

我有一个存储过程,在我的本地PC上是语法上可接受的,我有MySQL工作台5.2.44,我认为我的本地版本的MySQL是5.5.29,由文件夹名称判断。这是代码,我将其简化为插图

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行。我试过删除LIMIT 1,这没什么区别。有没有办法编写查询,以便MySQL 5.1接受它?

2 个答案:

答案 0 :(得分: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 ;

这里有些值是你要插入的。

答案 1 :(得分:0)

我需要添加

DELIMITER;

到代码的末尾,如图所示。不知道为什么。