2017-12-03 80 views
0

我想在執行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 –

回答

1

你可以使用:

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