MySql SP不工作
我是mysql新手,我正在尝试使用下面的SP获取数据,在这里我使用了if-else语句MySql SP不工作,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,我是mysql新手,我正在尝试使用下面的SP获取数据,在这里我使用了if-else语句 CREATE DEFINER=`Travel_user`@`%` PROCEDURE `new_procedure`(in bus_id int, in travel_id int, in tr_date Date, in Seat_no varchar(45)) BEGIN select @SeatNo := Fare from Travel_booking.SpecialFares wher
CREATE DEFINER=`Travel_user`@`%` PROCEDURE `new_procedure`(in bus_id int, in travel_id int, in tr_date Date, in Seat_no varchar(45))
BEGIN
select @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;
IF (@SeatNo = NULL) then
select @SeatNo := sd.Fare from SeatDetails as sd
inner join tbl_ColumnDetails as c on c.ColumnId=sd.ColId
inner join tbl_RowsDetails as r on r.RowId=c.RowID
inner join BusStructure as bs on bs.StructId=r.StructureId
inner join BusDetails as bd on bd.Structure=bs.StructId
where sd.IsActive=1 and bd.BusiId=bus_id and sd.travelid=travel_id and sd.SeatNo=Seat_no;
END IF;
END
我是这样称呼它的
call Travel_booking.new_procedure(34, 53, '2018-03-01', 'L2');
First select查询工作正常,显示正确的结果。
但当第一个查询的结果为空时,if语句给出空结果
我已经分别检查了这两个查询,如下所示,它们都在工作
第一个问题
select Fare from Travel_booking.SpecialFares
where TravelId=53 and date='2018-03-02';
第二个问题
select sd.Fare from SeatDetails as sd
inner join tbl_ColumnDetails as c on c.ColumnId=sd.ColId
inner join BusStructure as bs on bs.StructId=r.StructureId
inner join BusDetails as bd on bd.Structure=bs.StructId
where sd.IsActive=1 and bd.BusiId=34 and sd.travelid=53 and sd.SeatNo='L2';
但当我在SP中执行它们并将参数传递给它们时,我在同一个查询中的if语句中得到了空白结果。我的建议是 1) 您有许多
联接
请查看每个联接是否有任何值,以及这些联接是否正确连接,这意味着联接的值相等
2) 检查参数,在SQL环境中,检查参数是否生成结果
3) 提示还包括,检查参数是否正确传递。创建输出会立即告诉开发人员您的代码有什么问题。我的建议是
1) 您有许多联接
请查看每个联接是否有任何值,以及这些联接是否正确连接,这意味着联接的值相等
2) 检查参数,在SQL环境中,检查参数是否生成结果
3) 提示还包括,检查参数是否正确传递。创建输出会立即告诉开发人员您的代码有什么问题。如果(@SeatNo为NULL),则
如果结束
write不是“=” 如果(@SeatNo为空),则
如果结束
write不是“=” 感谢大家的回应,帮助我找出我的错误所在。
我得到了答案
只需在SP like的开头声明null变量即可
BEGIN
select @SeatNo := NULL;
select @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;....
感谢大家的回应,帮助我找出我错在哪里。
我得到了答案
只需在SP like的开头声明null变量即可
BEGIN
select @SeatNo := NULL;
select @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;....
选择@SeatN:=
拼写不正确。@Brien很抱歉此处输入错误,现在我更正了它,但仍然得到空白结果您在两个查询中都使用了@Seatno。读取值为null vs=nullSELECT@SeatN:=
拼写不正确。@Brien很抱歉此处输入错误,现在我更正了它,但仍然得到空白结果您在两个查询中都使用@Seatno。Read-up为null vs=null我的查询是正确的,工作正常,但当我向它传递参数时,它不工作。我的查询是正确的,工作正常,但当我向它传递参数时,它不工作working我已经尝试过了,但它只能在第一次查询结果为空之前工作。当第一个查询在@SeatNo中添加一些值时,我得到的是空白结果,即使第一个查询也是空白修改:-如果(@SeatNo为NULL或@SeatNo=''),那么如果您想返回值,如果@SeatNo为NULL或空白,那么为新需求编写其他部分…我按照您的建议修改了IF表达式。仍然不起作用我已经试过了,但它只在第一次查询结果为空之前起作用。当第一个查询在@SeatNo中添加一些值时,我得到的是空白结果,即使第一个查询也是空白修改:-如果(@SeatNo为NULL或@SeatNo=''),那么如果您想返回值,如果@SeatNo为NULL或空白,那么为新需求编写其他部分…我按照您的建议修改了IF表达式。仍然不工作,因为您发现,选择。。。当找不到行时进入
。您还应该查看存储程序变量,而不是在过程中使用用户定义的变量。。。当找不到行时进入
。您还应该查看存储程序变量,而不是在过程中使用用户定义的变量。