我不知道为什么我会遇到这样的麻烦,但我无法让它正常工作。我正在尝试创建一个存储过程来更新我选择的 bookingid 的预订日期时间。我有这个:
DELIMITER //
CREATE PROCEDURE UpdateBooking (
IN BookingID INT,
IN NewSlotTime DATETIME
)
BEGIN
DECLARE ConfirmationMessage VARCHAR (255);
DECLARE UpdatedBookingID INT;
SET UpdatedBookingID = BookingID;
UPDATE bookings
SET BookingSlot = NewSlotTime
WHERE BookingID = UpdatedBookingID;
SET ConfirmationMessage = CONCAT('Booking ID ', UpdatedBookingID, ' has been updated');
SELECT ConfirmationMessage as Confirmation;
END;
//
DELIMITER ;
CALL UpdateBooking (37, '2023-09-14 10:45:00');
我也尝试过:
DELIMITER //
CREATE PROCEDURE UpdateBooking (
IN BookingID INT,
IN NewSlotTime DATETIME
)
BEGIN
DECLARE ConfirmationMessage VARCHAR (255);
UPDATE bookings
SET BookingSlot = NewSlotTime
WHERE BookingID = BookingID;
SET ConfirmationMessage = CONCAT('Booking ID ', BookingID, ' has been updated');
SELECT ConfirmationMessage as Confirmation;
END;
//
DELIMITER ;
CALL UpdateBooking (37, '2023-09-14 10:45:00');
每次我运行这些代码时,它都会返回相同的结果。没有错误,它只是将 bookingslot 列中的所有日期时间值更改为我为一个 bookingID 回调的值。我正在使用 MySQL Workbench 来运行这些代码。据我所知,数据库没有任何问题,并且我已经在该数据库中编写了其他运行良好的存储过程。这是我遇到的第一个问题。
我感谢任何帮助。
试试这个:
DELIMITER //
CREATE PROCEDURE UpdateBooking (
IN BookingID INT,
IN NewSlotTime DATETIME
)
BEGIN
DECLARE ConfirmationMessage VARCHAR(255);
UPDATE bookings
SET BookingSlot = NewSlotTime
WHERE BookingID = BookingID;
SET ConfirmationMessage = CONCAT('Booking ID ', BookingID, ' has been updated');
SELECT ConfirmationMessage as Confirmation;
END;
//
DELIMITER ;
WHERE BookingID = BookingID
- 这始终是正确的,因此所有行而不是单个行都被更新。
解析器无法确定第一个 BookingID 指定了列名,而第二个 BookingID 是传递的参数。
只需使用另一个参数名称,例如Booking_ID。