-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

元のクエリが何をしようとしているのかわからないため、確信が持てませんが、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 に答える
0

ステートメントに AND 条件と OR 条件の両方が混在しているため、意図したとおりに解釈されない場合があります。さらに、2 つの比較はa_role、AND ではなく OR を使用する必要があるようです。次のことを試してください。

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 に答える