2016-08-29 11 views
0

ローカルvaribaleがA、B、C、Dなどと等しくないかどうかをチェックするために複数の条件をチェックする必要があります。明らかに実際の値は私がここで言及した値とは異なります。 、現実の世界では複数の条件またはif else文の条件最良の方法oracle pl sql

IF(condition1 AND (myLocalVAr NOT IN ('A','B','C','D','E','F'))) THEN 
---- 
-- 
END IF; 

または

IF(condition1 AND (myLocalVAr <> 'A' AND myLocalVAr <> 'B' AND myLocalVAr <> 'C'--'D'--'E'--'F' --so on))) THEN 
---- 
-- 
END IF; 
+8

「val(1、2、3)にない」とは、あなたが考えるように「val <> 1 AND val <> 2 and val <> 3'」を意味します。それ以外の「NOT IN」バージョンは読み込み、書き込み、保守がずっと簡単で、両方のフォームはデータベースエンジンによって同じ方法で処理されるため、「NOT IN」バージョンを好むべきです。 – mathguy

+0

ああああ私はORを書いて忘れてしまった。あなたは正解です。ORの代わりにANDを書いてください。 –

+0

われわれが知っている限り、PL/SQLコンパイラはすでに最初のバージョンをもう1つのバージョンにもう一度書き直しています。私はそれが最も効率的なことは何でもしていると確信しています、そして、おそらく、明確で、正しい、保守可能なコードに焦点を当てるべきです。 btwではif条件のまわりに角括弧はありません。 –

答えて

2

我々は常にシンプルかつ自動化された方法および方法で考えるとコードを探して:私は下から最高や他の可能な方法がされている1知りたいです目標を達成できない場合は、より複雑なソリューションを検討する必要があります。

A、B、C、Dなどのソースがテーブルからのものである場合は、

のように、最初の方法は簡単に目的を達成するのが簡単です。
myLocalVAr not in (select column_name from table_name) 

句は欠点がありますが、「ないで」、これが正常に動作している、そしてすべての新しい値は、このアプローチにより、取り扱いが容易になります。

  1. あなたは、戻り値のことを確認する必要がありサブクエリには単一のNULL値がありません。そうであれば、ロジック全体がnullの場合、この場合はnvl関数を使用して処理するか、where句を使用してnullレコードを削除します。

  2. performance: "not in"句は、myLocalVArを使用して値の長いリストを作成したときに、良いパフォーマンスを得られません。ここでは「存在しない」という言葉を使用しています。

あなたが言及されている第2のアプローチは、実用的ではない、それは勤勉、エラー生まれ、将来的に新しい値で管理するのは難しいです、あなたはすべての時間を自分で新しい値を追加し、このコードを変更する必要がありますあなたは新しい価値と比較する必要があるので、私たちはこのような解決策に従わない。

+0

は存在しませんSQLクエリでは動作しますが、pl-sql構文では機能しませんIF(condition1 AND(myLocalVAr not NOT( 'A'、 'B'、 'C​​'、 'D'、 'E'、 'F')))それから...動かない –