いいえ、オラクルのnullの扱いは特異であり、他のすべての人とは異なり、ANSI規格と矛盾しています。しかし、オラクルの弁護では、一貫性のあるANSI規格が存在するずっと前に、おそらくこの治療に落ち着き、コミットしました!
それはすべて、Oracleが文字列とそれに続く文字列データを含む文字列を格納するという事実から始まります。 NULLは、文字数がゼロで、後続の文字列データがないことで表されます。これは、空の文字列('')とまったく同じです。オラクルには、それらを区別する方法がありません。
これは、この連結の場合のように、いくつかの風変わりな動作につながります。 Oracleには、文字列の長さを返す関数LENGTHもありますが、これは逆の方法で定義されているため、LENGTH('')はゼロではなくNULLを返します。だから:
LENGTH('abc') + LENGTH('') IS NULL
LENGTH('abc' || '') = 3
これは基本的な数学的原理に違反しているように思えます。
もちろん、オラクルの開発者はこれに非常に慣れているので、私たちの多くはそれについて何も悪いことや奇妙なことさえ見ることができません-実際、世界の他の地域は間違っていて、空の文字列とNULL 同じことです!