Хранимая процедура Mysql возвращает некоторые странные результаты - PullRequest
0 голосов
/ 13 ноября 2018

Когда я запускаю следующее, выберите Запрос в SQl

SELECT Count(*) 
FROM   workordercurrent 
WHERE  office_id = 1 
       AND ( ( scheduleddate = '2018-11-01' ) 
              OR ( schedulestopdate = '2018-11-01' ) 
              OR ( scheduleddate = '0000-00-00' 
                   AND orderdate = '2018-11-01' ) ) 
       AND worktype <> 6 

Запрос возвращает 694 как правильное число

Когда я пишу тот же запрос в процедуре SQL с 2 входными параметрами

office_id(int) and order_date (DATE)


BEGIN 
    SELECT Count(*) 
    FROM   workordercurrent 
    WHERE  office_id = office_id 
           AND ( ( scheduleddate = order_date ) 
                  OR ( schedulestopdate = order_date ) 
                  OR ( scheduleddate = '0000-00-00' 
                       AND orderdate = order_date ) ) 
           AND worktype <> 6; 
END 

It returns the count as 3260

В чем здесь проблема, так как оба запроса абсолютно одинаковы. Вот как я выполняю хранимую процедуру

enter image description here

1 Ответ

0 голосов
/ 13 ноября 2018

Вам следует избегать использования имени параметра хранимой процедуры, такого же, как столбцы / псевдонимы, используемые в вашем SP.WHERE office_id = office_id ведет себя странно из-за неоднозначного имени.MySQL, вероятно, не может разрешить его как имя столбца или параметр.

Я обычно добавляю к именам параметров in_ или out_ или inout_;который также показывает тип параметра (для удобства чтения).

Таким образом, вы можете переименовать параметры вместо in_office_id и in_order_date.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...