Oracle での Null に関する別の質問があります。
セッションテーブルとして使用される小さなテーブルがあります。各行は特定のセッションです。セッションが正常に終了した場合、最後の列はバージョン番号を示し、セッションがドロップされた場合は null を示します。
この列は null になる可能性があり、最大バージョン番号または null を sessionNumber 変数に選択したいと考えています。これは私が設定したオリジナルでした
SELECT MAX (VerNumber) INTO sessionNumber
FROM Table_A
WHERE sessionDate = -- some date
AND VerNumber IS NOT NULL;
colがnullの場合、これは1行を返します
このようにNVLを使用してみました
SELECT NVL(MAX (VerNumber),NULL) INTO sessionNumber
FROM Table_A
WHERE sessionDate = -- some date
AND VerNumber IS NOT NULL;
混乱を解消するために、NOT NULL 条件が存在して、同じユーザーによる同じ日付の余分なセッションを防ぎます。この状況で TBH NOT NULL 条件が削除されても、(空の) 行が返されます。Null と集計関数に欠けているものがあると思います。
しかし、うまくいきません。例外を使用できる場所も見ましたが、それは複雑な修正のようです。
どんなガイダンスも大歓迎です。
ありがとう。
要求に応じてさらに明確化。
私のテーブルには、user、date、state、および verNumber の 4 つの列があります。
user と date は識別子列です (正式には PK ではありませんが、そのように見ることができます)。
state セッションが完了したかどうかを示します verNumber は、その日付のセッションが完了した回数を示し、その日付のセッションが完了していない場合は null になる可能性があります。
その日付に利用可能な MAX(VerNumber) または日付が利用できない場合または VerNumber の値が null の場合に null を割り当てたい変数 sessionNumber があります。
Table_A のサンプル行
USER | DATE | STATE | VERNUMBER
'AName' | 2012-06-25 | 'YES' | 1
'CName' | 2012-06-25 | 'YES' | 2
'BName' | 2012-06-26 | 'NO' | --NULL
したがって、日付が 06-25 の場合は 2 が値であると予想され、06-26 の場合は null が予想されます。