Oracle DB - 如何在AND运算符中设置IF语句?
问题描述:
我想在执行AND
运算符之前设置IF
声明。Oracle DB - 如何在AND运算符中设置IF语句?
例如:
PROCEDURE STORE_SIGNLOOP_APPROVER
(
userID in varchar2
isManager in varchar2
result out ref_cursor
)
AS
BEGIN
SELECT user_role
FROM users
WHERE user_id = userID
AND **IF isManager = 'true'** user_id IN (SELECT user id from managers)
END;
答
你可以使用:
select user_role
fron users
where user_id = userID
AND (((user_id in (select user_id from managers) AND isManager = 'true'))
OR isManager = 'false'
);
注:不是传递 '真/假' 作为字符串文字,你可以使用 '0/1' 的值。
为什么要预先计算“ismanager”?你可以在你的proc中检查它。如果用户也在管理者表中,那么他是一名管理者。为什么你使用varchar作为true/fale值? –
嗨,它只是一个简单的例子来解释我的目的。你对它不是很好;) –
对于这个“例子”,我只是简单地将管理人员加入到用户的行列中。如果用户不是管理员,则不需要结果。不知道为什么要使用一个过程:https://stackoverflow.com/a/25419698/7505395 –