#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. Только что увидел ваш ответ. Это действительно имеет смысл сделать! Спасибо за ваш ответ! 🙂