Операторы сравнения в хранимых процедурах SQL

#sql #stored-procedures #comparison-operators

#sql #хранимые процедуры #операторы сравнения

Вопрос:

Надеюсь, вы сможете помочь.

У меня есть эта хранимая процедура. Работает нормально, но у меня возникают проблемы с использованием операторов сравнения в моей хранимой процедуре. Смысл здесь в том, чтобы найти автомобили, которые ездили выше 10000.

Я искал ответ, но по какой-то причине не могу найти решение.

 elimiter //

CREATE PROCEDURE DISTANCE (kilometerafstand INT)
BEGIN
    SELECT bil.registreringsnummer, bil.kilometerstand, biltype.maerke, biltype.model
    FROM bil
    INNER JOIN biltype ON bil.id = biltype.id 
    WHERE bil.kilometerstand = kilometerafstand;
END;

//

call DISTANCE ( > 10000)  
  

Код работает нормально. Это просто операторы на моем расстоянии вызова.

Спасибо!

Комментарии:

1. Если вам нужны разные виды сравнений =, >, < и т.д., для этого процедуре нужен другой параметр.

2. Кстати, какую СУБД вы используете? (Этот код зависит от конкретного продукта.)

3. Ну ладно! Я следую курсу, который я просто делаю самостоятельно. Итак, некоторые таблицы я сделал сам.

Ответ №1:

у вас не может быть такого оператора сравнения. У вас может быть еще один параметр

  operator varchar 
  

и вы можете иметь пользовательскую логику, например eq , ne , lt , gt , наоборот. и вы можете написать

 where (operator = 'eq' and kilometerstand = kilometerafstand )
  or (operator = 'gt' and kilometerstand > kilometerafstand
  or ....
  

Ответ №2:

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

 DELIMITER //

CREATE PROCEDURE DISTANCE (in_min_km INT, in_max_km INT)
BEGIN
    SELECT bil.registreringsnummer, bil.kilometerstand, biltype.maerke, biltype.model
    FROM bil
    INNER JOIN biltype ON bil.id = biltype.id 
    WHERE (bil.kilometerstand >= in_min_km or in_min_km IS NULL) AND
          (bil.kilometerstand <= out_min_km or in_min_km IS NULL);          
END;

//

CALL DISTANCE(10000, NULL) ; 
  

Комментарии:

1. Только что увидел ваш ответ. Это действительно имеет смысл сделать! Спасибо за ваш ответ! 🙂