Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle Check Constraint

Въпреки че нямам 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));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразуване на Oracle заявка в потребителски дефинирани типове в pl/sql

  2. Как да извлечете група от регулярен израз в Oracle?

  3. Стойностите на Oracle Sequence не са подредени

  4. Получаване на XML от пет различни таблици на Oracle

  5. SQL грешка:ORA-01861:литералът не съвпада с форматен низ 01861