1

関数にラップされた条件が満たされたときに、selectクエリにフィルター条件を含める必要があります。条件が満たされない場合は、フィルター条件を適用しないでください。

コード:

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>>  
and (case when oracle_function() = 'YES' then 'tab_a.cancel_date is null'
      else null
    )

このように書くと、「無効な関係演算子」エラーがスローされます。その場合は右側の値に解決されるはずだと気づき、条件が満たされたときに期待される結果が得られないようなものを追加してみました。

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>>  
and (case when oracle_function() = 'YES' then 'tab_a.cancel_date is null'
       else '1'
      ) = '1'

私の期待する出力は次のようになります。

oracle_function()= YESの場合、クエリは効果的に次のように解決されます。

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>> and tab_a.cancel_date is null;

そうしないと:

select col_a,col_b,cancel_Date from tab_a 
where col_c = <<some_condition>>;

何かご意見は ?

4

1 に答える 1

2

ステートメントの代わりにcase、このクエリでは、関数が、以外の値を返すか'YES'、日付がnullである必要があります...これは元のクエリに類似している必要があります。

select col_a,col_b,cancel_Date 
from tab_a 
where col_c = <<some_condition>>  
and (oracle_function() <> 'YES' OR tab_a.cancel_date is null)
于 2012-11-20T20:32:45.163 に答える