MySql SP не работает

Я новичок в 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');

Первый запрос выбора работает нормально и показывает правильный результат. Но если оператор дает пустой результат, когда результат первого запроса пуст.

Я проверил оба запроса отдельно, как показано ниже, они оба работают.

Первый запрос,

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 в том же запросе.

SELECT @SeatN :=. . . написан неправильно.
Brien Foss 12.03.2018 06:22

@Brien извини, что здесь была опечатка

Syed 12.03.2018 06:25

теперь я исправил это, но все еще получаю пустой результат

Syed 12.03.2018 06:31

Вы используете @Seatno в обоих своих запросах.

Kedar Limaye 12.03.2018 06:44

Чтение равно null vs = null

P.Salmon 12.03.2018 06:45

@ ks123 No. только во втором запросе

Syed 12.03.2018 06:51

@ P.Salmon Я проверил это, используя как 'is null', так и '= null'

Syed 12.03.2018 06:54

Не используйте имена параметров, которые совпадают с именами столбцов.

P.Salmon 12.03.2018 07:01

@ P.Salmon все параметры отличаются от названий столбцов

Syed 12.03.2018 07:04
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
9
56
3

Ответы 3

Мои предложения были бы.

1) У вас много joins, посмотрите, имеет ли каждое соединение какие-либо значения и правильно ли подключены эти joins, что означает, что соединения имеют одинаковую ценность.

2) Проверьте свои параметры. В среде SQL проверьте, дают ли ваши параметры результаты или нет.

3) Совет также может быть, проверьте, правильно ли передаются ваши параметры. Создание вывода немедленно сообщит вам, разработчику, что не так с вашим кодом.

мой запрос правильный и работает нормально, но когда я передаю ему параметры, он не работает

Syed 12.03.2018 06:56

IF (@SeatNo является NULL), то

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;

КОНЕЦ ЕСЛИ;

запись вместо '=';

Я уже пробовал, но он работает только до тех пор, пока результат первого запроса не станет пустым. когда первый запрос добавляет какое-то значение в @SeatNo, тогда я получаю пустой результат, даже первый запрос также пуст

Syed 12.03.2018 07:16

Обновлено: - ЕСЛИ (@SeatNo равно NULL или @ SeatNo = ''), то

Pankaj Kumar 12.03.2018 07:20

Если вы хотите вернуть значение, если @SeatNo имеет значение null или пусто, напишите еще часть для новых требований ...

Pankaj Kumar 12.03.2018 07:23

Я изменил выражение IF, как вы мне предлагаете. Все еще не работает

Syed 12.03.2018 07:25

Спасибо всем за то, что ответили и помогли мне понять, в чем я ошибаюсь. Я получил свой ответ Просто объявите нулевую переменную в начале SP, например

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

Как вы обнаружили, SELECT ... INTOне делает то, что люди обычно ожидают, когда строка не найдена. Вам также следует изучить сохраненные программные переменные, а не использовать пользовательские переменные в процедурах.

Michael - sqlbot 13.03.2018 00:33

Другие вопросы по теме