私はOracleを持っていませんが、PostgreSQLと最初の例(IS_DISABLED
)で簡単なテストを行いました。 NULL
であること およびDISABILITY_INCOME_TYPE_ID
1):
postgres=> select (null is null and 1 is null);
?column?
----------
f
(1 registro)
postgres=> select (null is null and 1 is null) or (null = 0 and 1 is null);
?column?
----------
f
(1 registro)
postgres=> select (null is null and 1 is null) or (null = 0 and 1 is null) or (null = 1);
?column?
----------
(1 registro)
ここでは、この場合、式(少なくともPostgreSQLでは)がNULLを返すことがはっきりとわかります。 マニュアル から 、
したがって、OracleがPostgreSQLと同じように動作する場合、チェック制約は合格になります。 。
これが当てはまるかどうかを確認するには、NULLシェナニガンを明示的にチェックして回避し、機能するかどうかを確認します。
CHECK ((IS_DISABLED IS NULL AND DISABILITY_INCOME_TYPE_ID IS NULL)
OR (IS_DISABLED IS NOT NULL AND IS_DISABLED = 0 AND DISABILITY_INCOME_TYPE_ID IS NULL)
OR (IS_DISABLED IS NOT NULL AND IS_DISABLED = 1));