2012-07-12 3 views
-3

Oracle sql의 바인드 변수를 기반으로하는 쿼리에서 조건이 실행되는 다른 세트를 원합니다. 여기 내가 시도한 것입니다여기서 조건은 바인드 변수를 기반으로합니다

표 A 내가 바인드 변수로 전달됩니다 현재의 역할에 따라 역할을 선택하려고 한마디로

a_id primary key 
a_role varchar2(10) 

SELECT * 
    FROM a 
    WHERE a_role IN ('approved','rejected' , 'needInfo') AND 
     :bind = 'new' OR 
     :bind != 'new AND 
     a_role IN ('complete') AND 
     :bind = 'approved' OR 
     :bind != 'approved' 

가 포함되어 있습니다. 나는

if(:bind = 'new') 
    {select 'approved' , 'rejected' , 'needInfo' } 
    else if (:bind = 'approved') 
    { select 'complete' } 

감사합니다 같은,

Puneet

+0

안녕하세요, 나는 use.I에 대한 키워드를 시작하는 방법을 얻지 못하고있어, 힌트를 사용할 수 있습니다. –

+1

안녕하세요, 스택 오버플로에 오신 것을 환영합니다! 귀하의 질문은 당신이 무엇을하려고하는지에 대한 아이디어가 없으므로 대답하기가 어렵습니다. 올바른 구문을 모르는 경우 의사 코드에서 [시도한 내용] (http://mattgemmell.com/2008/12/08/what-have-you-tried/)에 대한 설명을 제공하여 사용자가 훨씬 더 당신을 도울 수있을 것입니다. 귀하의 질문이 의미하는대로 당신은 그들이 당신을 위해 당신 자신의 일을하기 위해 성취하려는 것을 추측 할 누군가를 요구하고 있습니다. – Ben

+1

유가 무엇을 달성하려고하는지 명확하지 않습니다. 귀하의 질의와이를 다양화할 방법을 게시하십시오. – APC

답변

0

당신은 모두 AND 및 OR 조건이 명세서에 혼합, 그리고 당신이 원하는대로 해석 할 수 없습니다를 원한다. 또한 a_role에 대한 두 가지 비교가 AND'd가 아닌 OR'd와 같아야합니다. 다음을 시도하십시오.

SELECT * 
    FROM a 
    WHERE (:bind = 'new' AND 
     (a_role IN ('approved','rejected' , 'needInfo')) OR 
     (:bind = 'approved' AND 
     a_role IN ('complete')) 

공유하고 즐기십시오.

0

내가 원래 쿼리가 수행하려고하는 분명한 아니에요 때문에 내가 확신 할 수 없다 -을 SQLPLUS에서 실행중인 가정하지만, 이런 식으로 뭔가해야한다 :

variable bind varchar2 
bind := 'new' 
SELECT *  
FROM a 
WHERE (:bind = 'new' AND a_role IN ('approved','rejected' , 'needInfo')) 
OR (:bind = 'approved' AND a_role IN ('complete')) 

article explains thins fairly neatly

관련 문제