sql >> Base de Datos >  >> RDS >> Oracle

Restricción de comprobación de Oracle

Si bien no tengo Oracle, hice una prueba rápida con PostgreSQL y su primer ejemplo (IS_DISABLED siendo NULL y DISABILITY_INCOME_TYPE_ID siendo 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)

Aquí vemos claramente que, en este caso, su expresión (al menos en PostgreSQL) devuelve NULL. De el manual ,

Entonces, si Oracle se comporta de la misma manera que PostgreSQL, la restricción de verificación pasaría .

Para ver si este es el caso, evite las travesuras NULL comprobándolo explícitamente y vea si funciona:

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));