我有一个存储过程,在我的本地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接受它?
答案 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;
到代码的末尾,如图所示。不知道为什么。