我有一个存储过程。我在这里传递一个布尔值,例如IS_ELIGIBLE。现在,我希望能够编写如下查询:
SELECT col1, CASE WHEN IS_ELIGIBLE THEN col2 * 100 ELSE col2 * 50 END INTO OUT_COL1, OUT_SCORE FROM TABLE_NAME
问题是由于IS_ELIGIBLE不是TABLE_NAME中的列之一,查询出错了。我可以使用if..else即写相同的查询。
IF IS_ELIGIBLE SELECT col1, col2 * 100 ELSE SELECT col1, col2 * 50 END
但是我将重复两次select语句。我知道我可以创建具有该select语句的函数,这样我就不必重复两次。但是我只是很好奇是否可以在不执行if..else或创建新函数的情况下完成?谢谢。
问题不在于IS_ELIGIBLE不是表中的列,而是它是布尔值并且SQL无法处理布尔值(我知道,不要问)。因此,您需要引入另一个类似这样的变量:
IS_ELIGIBLE_NUM NUMBER := CASE WHEN IS_ELIGIBLE THEN 1 ELSE 0 END; .. SELECT col1, CASE WHEN IS_ELIGIBLE_NUM = 1 THEN col2 * 100 ELSE col2 * 50 END INTO OUT_COL1, OUT_SCORE FROM TABLE_NAME