MySQL 程序不适用于 select 和删除
MySQL procedure not working with both select and delete
我创建了一个程序,使用输入的车辆编号从车辆 table 获取车辆 ID,然后删除该车辆 ID 的预订记录,最后删除车辆 [=16] 中的条目=]...但是在创建过程时,我在第 7 行收到一个错误,说 Error Code: 1064. 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 '' at line 7
请帮助我确定问题...
提前致谢
CREATE PROCEDURE `DeleteVehicleWithBookings`(IN vehicleNo VARCHAR(10))
BEGIN
#get vehicle id
select @vid = vehicleID
from vehicle
where vehicle_no = vehicleNo;
#delete booking
delete from booking where vehicleID = vid;
#delete vehicle
delete from vehicle where vehicle_no = vehicleNo;
END
DELIMITER ;
首先,我建议您为参数添加前缀,以便更清楚地将它们与列名区分开来。
那么,你没有正确分配和使用变量。所以,你的意图更像是这样:
CREATE PROCEDURE `DeleteVehicleWithBookings`(
IN in_vehicleNo VARCHAR(10)
)
BEGIN
#get vehicle id
select @vid := vehicleID
from vehicle
where vehicle_no = in_vehicleNo;
#delete booking
delete from booking where vehicleID = @vid;
#delete vehicle
delete from vehicle where vehicle_no = in_vehicleNo;
END
DELIMITER ;
前两个语句可以不用变量来写,但是:
#delete booking
delete b from booking b
where b.vehicleID = (select v.vehicleID
from vehicle v
where v.vehicle_no = in_vehicleNo
);
而且,您或许可以定义一个级联删除外键约束并完全消除存储过程。
我创建了一个程序,使用输入的车辆编号从车辆 table 获取车辆 ID,然后删除该车辆 ID 的预订记录,最后删除车辆 [=16] 中的条目=]...但是在创建过程时,我在第 7 行收到一个错误,说 Error Code: 1064. 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 '' at line 7
请帮助我确定问题...
提前致谢
CREATE PROCEDURE `DeleteVehicleWithBookings`(IN vehicleNo VARCHAR(10))
BEGIN
#get vehicle id
select @vid = vehicleID
from vehicle
where vehicle_no = vehicleNo;
#delete booking
delete from booking where vehicleID = vid;
#delete vehicle
delete from vehicle where vehicle_no = vehicleNo;
END
DELIMITER ;
首先,我建议您为参数添加前缀,以便更清楚地将它们与列名区分开来。
那么,你没有正确分配和使用变量。所以,你的意图更像是这样:
CREATE PROCEDURE `DeleteVehicleWithBookings`(
IN in_vehicleNo VARCHAR(10)
)
BEGIN
#get vehicle id
select @vid := vehicleID
from vehicle
where vehicle_no = in_vehicleNo;
#delete booking
delete from booking where vehicleID = @vid;
#delete vehicle
delete from vehicle where vehicle_no = in_vehicleNo;
END
DELIMITER ;
前两个语句可以不用变量来写,但是:
#delete booking
delete b from booking b
where b.vehicleID = (select v.vehicleID
from vehicle v
where v.vehicle_no = in_vehicleNo
);
而且,您或许可以定义一个级联删除外键约束并完全消除存储过程。