-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' }

谢谢 ,

普奈特

4

2 回答 2

0

您的语句中同时混合了 AND 和 OR 条件,它们可能不会被解释为您想要的。此外,看起来这两个比较a_role应该是 OR'd 一起而不是 AND'd。尝试以下操作:

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

分享和享受。

于 2012-07-12T11:57:14.500 回答
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'))

这篇文章相当巧妙地解释了薄

于 2012-07-12T12:00:13.583 回答