存储过程中的比较运算符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)  

代码工作正常。只是我叫disTANCE的接线员。

谢谢!

解决方法

您不能有这样的比较运算符。您可以再设置一个参数

 operator varchar 

,您可以使用自定义逻辑,例如eqneltgt,反之亦然。你可以写

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

我只是将存储过程设计为采用两个参数,即最小值和最大值:

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) ;