我有一个存储过程。我在其中传递布尔值,例如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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)