0

私のプロジェクトでは、SQL クエリを作成する必要がありますが、問題があります。たとえば、1,000 の機関があり、それらの機関についていくつかのフィールドをテストする必要がありますが、ある機関に対して一部のフィールドが存在しない場合があるため、クエリは結果でこの機関を破棄します。私がやりたいことは、この機関にフィールドが存在するかどうかをテストし、存在する場合は条件テストを行い、存在しない場合は条件に合格することです。

次のような「WHERE」部分で簡単に行う方法はありますか:

where if(e.field1 exist) then e.field1='plop1' and if(e.field2 exist) then e.field2='plop2'
4

3 に答える 3

2
where (e.field1 is null or e.field1 = 'plop1')
    and (e.field2 is null or e.field2 = 'plop2')
于 2012-11-16T10:40:18.967 に答える
0

この目的のために合体関数を使用できます。

SELECT COALESCE(e.field1, 'plop1') AS field1 FROM table e

これにより、フィールドのNULL値が文字列'plop1'に置き換えられ、各レコードに対してNULL以外の結果が生成されます。

http://www.techonthenet.com/oracle/functions/coalesce.phpも参照してください。

編集:フィールド「field1」がデータベーススキーマに存在すると想定しています。そうでなければ、これはデータベース/アプリケーションの設計レベルで取り組まれた可能性のあるまったく異なる問題です。

于 2012-11-16T10:41:33.687 に答える
-1

REF CURSOR を使用する必要があります

以下のように

TYPE curvar_type IS REF CURSOR;
   curvar    curvar_type;

    my_query_v   VARCHAR2(1000) := 'select * from something';
    where_v       VARCHAR2(100);
    BEGIN
       ...
       IF (abc is null)
           where_v := 'xyz=null';
       ELSE
           where_v := 'xyz='''||abc'' ';
       END IF;

        my_query_v := my_query_v || ' WHERE ' || where_v;
       ...
于 2012-11-16T10:43:47.477 に答える