Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Ograniczenie czeku Oracle

Chociaż nie mam Oracle, zrobiłem szybki test z PostgreSQL i twoim pierwszym przykładem (IS_DISABLED będąc NULL i DISABILITY_INCOME_TYPE_ID będąc 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)

Tutaj widzimy wyraźnie, że w tym przypadku twoje wyrażenie (przynajmniej w PostgreSQL) zwraca NULL. Z instrukcji ,

Tak więc, jeśli Oracle zachowuje się tak samo jak PostgreSQL, ograniczenie sprawdzające przejdzie .

Aby sprawdzić, czy tak jest, unikaj wybryków NULL, wyraźnie sprawdzając, czy to działa:

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. Komunikat o błędzie ASP Classic SQL Query, proszę o prawidłową składnię

  2. Co to są ukryte pola Oracle?

  3. Jak przekonwertować znacznik czasu z milisekundami do tej pory w Oracle

  4. Oracle wybiera dane według ciągłych bloków dat

  5. Zapytanie Oracle Update z połączeniami