Oracle DB - 如何在AND运算符中设置IF语句?

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; 
+0

为什么要预先计算“ismanager”?你可以在你的proc中检查它。如果用户也在管理者表中,那么他是一名管理者。为什么你使用varchar作为true/fale值? –

+0

嗨,它只是一个简单的例子来解释我的目的。你对它不是很好;) –

+0

对于这个“例子”,我只是简单地将管理人员加入到用户的行列中。如果用户不是管理员,则不需要结果。不知道为什么要使用一个过程:https://stackoverflow.com/a/25419698/7505395 –

你可以使用:

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' 的值。