2016-12-07 5 views
1

は、whileループ内の値に対してそれをチェックしようとしていますと、以下の結果を得ています:PL/SQLレコードプロパティ条件

While my_record.x != 'TXT' Loop // loop does not enter 
While NVL(my_record.x, '') != 'TXT' Loop // loop does not enter 
While NVL(my_record.x, ' ') != 'TXT' Loop // loop enters 

最初の2回の試行がデバッグ時に戻り値が式の真であることを知っているループに入っていないのはなぜですか?

+0

最初の1つのdoesntからより多くを読むことをお勧めします 'my_record.xがNULL'されたときにtrueと評価。だから大丈夫ですか?他の2つは '{''、 ''} <> 'TXT' 'のために入力する必要があります。しかし、意味がない '2)'は入力せず、 '3)'ループを入力してください:/ –

+0

このディスカッションを参照してください:http://stackoverflow.com/questions/203493/why-does-oracle-9i-treat-an-empty-文字列としてnull – DCookie

+0

ありがとうDCookie – KAD

答えて

3

短い答え:

  • ''NULLとして扱われるので、それは値

NULL != 'TXT'が真でも偽でもない状態でNULLを比較する場合

  • OracleがThree-valued logicを使用しています。それは不明です。

    NVL(my_record.x, '')NULLであるため、論理値NVL(my_record.x, '') != 'TXT'も不明である。ところで

    - でも、NULLはNULL

    に等しいではありませんあなたはdocumentation