MySql SP 不工作

标签 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 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');

第一个选择查询工作正常并且显示正确的结果。 但是当第一个查询结果为空时,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 语句中得到空白结果。

最佳答案

感谢大家的回复并帮助我找出错误所在。 我得到了我的答案 只需简单地在 SP 开头声明 null 变量,如

BEGIN
select  @SeatNo := NULL;
select  @SeatNo := Fare from Travel_booking.SpecialFares where TravelId=travel_id and date=tr_date ;....

关于MySql SP 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49228507/

相关文章:

mysql - 在 Mariadb 中创建数据库时出现惊人的 SQL 错误 1024

mysql - 在 Appengine 上使用外部 MySQL 服务器?

sql - 检查数据库中是否存在存储过程?

php - 从准备语句调用的存储过程的 INOUT 参数失败

java - JDBC中如何调用存储过程

mysql - 无法获取不同时间跨度的登录计数

mysql - 获取列值超过 X 个条目的所有行

php - 从多个表中选择,其中 php 变量等于列值

sql - 将表一值与 postgresql 中的两个不同表进行比较

postgresql - 在存储过程中设置自定义选项