1

ユーザーがテーブル内のデータをクエリ、追加、更新、または削除できるCICS画面で作業しています。私のテーブルの 1 つで、一意のキーは 5 つのフィールドで構成されており、そのうちの 2 つは NULL にすることができます。私のカーソルでは、

AND   (COLUMN_1 = :V??-REC.COLUMN-1 OR COLUMN-1 IS NULL)

次に、結果に対して評価を実行し、最も一致する結果を表示する必要があります。

現在NULLエントリを見つける方法:

EXEC SQL
    DECLARE V000001-CUR CURSOR FOR
    SELECT DOCM_N,
           DOCM_TYPE_T,
           REJ_RESN_C
    FROM   V000001
    WHERE  DOCM_N      = :V000001-REC.DOCM-N
    AND    DOCM_TYPE_T = :V000001-REC.DOCM-TYPE-T
    AND   (REJ_RESN_C  = :V000001-REC.REJ-RESN-C OR
           REJ_RESN_C IS NULL)
END-EXEC

更新または挿入を使用するときに、NULL インジケーターを使用してテーブルに NULL を挿入できることをオンラインで読みました。

例えば:

EXEC SQL
    UPDATE V000001
    SET    DOCM_N      = :V000001-REC.DOCM-N,
           DOCM_TYPE_T = :V000001-REC.DOCM-TYPE-T,
           REJ_RESN_C  = :V000001-REC.REJ-RESN-C
                           :WS-REJ-RESN-C-IND
    WHERE  DOCM_N      = :WW-DOCM-N
    AND    DOCM_TYPE_T = :WW-DOCM-TYPE-T
END-EXEC

私の質問。WHERE 句で null インジケーターを使用できますか?

そのような:

EXEC SQL
    DECLARE V000001-CUR CURSOR FOR
    SELECT DOCM_N,
           DOCM_TYPE_T,
           REJ_RESN_C
    FROM   V000001
    WHERE  DOCM_N      = :V000001-REC.DOCM-N
    AND    DOCM_TYPE_T = :V000001-REC.DOCM-TYPE-T
    AND    REJ_RESN_C  = :V000001-REC.REJ-RESN-C
                            :WS-REJ-RESN-C-IND
END-EXEC

4

1 に答える 1

2

!!! DB2 バージョン 8 以降の場合!!!

の句でNULLインジケータを使用するには、または使用する必要がありますWHERESELECTUPDATEDELETEIS NOT DISTINCT FROM

は不明であるためNULL、値を持たないため、何にも等しいことはありませんNULL

したがって、ユーザー入力を照合してエントリを検索する場合 (ユーザー入力を必須フィールドに移動した後)、通常は次のようなものを使用します。

EXEC SQL
    SELECT COLUMN_1,
           COLUMN_2,
           COLUMN_3
    FROM   V000001
    WHERE  COLUMN_1 = :V000001-REC.COLUMN-1
    AND    COLUMN_2 = :V000001-REC.COLUMN-2
    AND    COLUMN_3 = :V000001-REC.COLUMN-3
END-EXEC

または、必要な機能に応じて同等UPDATEまたはSQL。DELETE

COLUMN_1可能性がある場合はNULL、データをカーソルにフェッチするとき、および a をテーブルに更新/追加しようとするときに null インジケーターを使用しますが、句内の a のNULL一致はそれほど単純ではありません。NULLWHERE

には値が含まれていないため、次のようNULLにステートメントで null インジケーターを使用することはできません。WHERE

WHERE COLUMN_1 = :V000001-REC.COLUMN-1 :COLUMN-1-IND

角かっこを使い始めたらOR xxxx IS NULL(以下を参照)、間違った行を取得、更新、または削除しないように、あらゆる種類の他のチェックでプログラミングを開始する必要があります。

WHERE (COLUMN_1 = :V000001-REC.COLUMN-1 OR COLUMN_1 IS NULL)

WHERE句でnull インジケータを使用する正しい方法は次のようになります。

EXEC SQL
    SELECT COLUMN_1,
           COLUMN_2,
           COLUMN_3
    FROM   V000001
    WHERE  COLUMN_1 IS NOT DISTINCT FROM
                      :V000001-REC.COLUMN-1
                         :COLUMN-1-IND
    AND    COLUMN_2 = :V000001-REC.COLUMN-2
    AND    COLUMN_3 = :V000001-REC.COLUMN-3
END-EXEC

a の作業WHERE節はSELECT他のステートメントに転送できるため、これは anUPDATEまたは aを実行するときに完全一致を見つけるためにも機能します。DELETE


詳細: http://www.toadworld.com/platforms/ibmdb2/w/wiki/6842.nulls

于 2016-04-12T14:46:43.637 に答える