san*_*084 2 sql oracle plsql stored-procedures
我有一个存储过程.我在哪里传递一个布尔值,例如IS_ELIGIBLE.现在我希望能够编写如下的查询:
SELECT col1,
CASE
WHEN IS_ELIGIBLE THEN col2 * 100
ELSE
col2 * 50
END
INTO OUT_COL1, OUT_SCORE
FROM TABLE_NAME
Run Code Online (Sandbox Code Playgroud)
问题是因为IS_ELIGIBLE不是TABLE_NAME中的列之一,查询错误输出.我可以使用if..else ie编写相同的查询.
IF IS_ELIGIBLE
SELECT col1, col2 * 100
ELSE
SELECT col1, col2 * 50
END
Run Code Online (Sandbox Code Playgroud)
但我会重复两次选择声明.我知道我可以创建具有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
Run Code Online (Sandbox Code Playgroud)