sql >> Databáze >  >> RDS >> Oracle

Omezení kontroly Oracle

I když nemám Oracle, provedl jsem rychlý test s PostgreSQL a vaším prvním příkladem (IS_DISABLED je NULL a DISABILITY_INCOME_TYPE_ID být 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)

Zde jasně vidíme, že v tomto případě váš výraz (alespoň na PostgreSQL) vrací NULL. Z příručky ,

Pokud se tedy Oracle chová stejně jako PostgreSQL, kontrolní omezení by prošlo .

Chcete-li zjistit, zda je to tento případ, vyhněte se NULL podvodům tím, že je explicitně zkontrolujete a uvidíte, zda to funguje:

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. pdo lastInsertId vrací nulu (0)

  2. SQL Vložit řádek a zkopírovat vložené ID automatického přírůstku do jiného sloupce

  3. spojit se ve dvou různých sloupcích tabulky sqlite3

  4. jaký je lepší způsob, jak indexovat data z Oracle/relačních tabulek do elastického vyhledávání?