sql >> Database teknologi >  >> RDS >> Oracle

Oracle Check Constraint

Selvom jeg ikke har Oracle, lavede jeg en hurtig test med PostgreSQL og dit første eksempel (IS_DISABLED er NULL og DISABILITY_INCOME_TYPE_ID er 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)

Her ser vi tydeligt, at i dette tilfælde returnerer dit udtryk (i hvert fald på PostgreSQL) NULL. Fra manualen ,

Så hvis Oracle opfører sig på samme måde som PostgreSQL, ville kontrolbegrænsningen bestå .

For at se, om dette er tilfældet, skal du undgå NULL-svindlen ved eksplicit at tjekke efter det og se, om det virker:

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. Forskellen mellem LIKE og =i MYSQL?

  2. Kan ikke bruge en MySQL-forbindelse til entity framework 6

  3. Partitionsbeskæring baseret på kontrolbegrænsning fungerer ikke som forventet

  4. Doctrine2 ManyToMany-relation gemmer ikke