sql >> Database >  >> RDS >> Oracle

Oracle-controlebeperking

Hoewel ik Oracle niet heb, heb ik een snelle test gedaan met PostgreSQL en uw eerste voorbeeld (IS_DISABLED zijnde NULL en DISABILITY_INCOME_TYPE_ID zijnde 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)

Hier zien we duidelijk dat, in dit geval, je expressie (tenminste op PostgreSQL) NULL retourneert. Uit de handleiding ,

Dus als Oracle zich hetzelfde gedraagt ​​als PostgreSQL, zou de controlebeperking voldoen .

Om te zien of dit het geval is, vermijd de NULL-shenanigans door expliciet te controleren of het werkt:

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


  1. MySQL JOIN met IF-voorwaarden

  2. Een SQL-query om te selecteren totdat SUM(user_count) 1000 . bereikt

  3. Hoe een fout op te vangen in forall plsql

  4. Gegevens visualiseren