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

CHECK CONSTRAINT в Oracle SQL

Използвайте ограничение извън реда:

CREATE TABLE Goods_In_Wagon (
  Goods_ID NUMBER(whatever),
  Wagon_ID NUMBER(whatever),
  Total_Weight NUMBER(whatever),
  CONSTRAINT Check_WagID_Weight
    CHECK (Wagon_ID NOT BETWEEN 90 AND 99 OR Total_Weight > 10)
)

Ако Wagon_ID е не между 90 и 99, ограничението преминава. Ако е между 90 и 99, Total_Weight трябва да е по-голямо от 10.

Ограничение извън линия като това ви позволява да приложите логиката на ограничението на ниво ред, което означава, че може да използва всяка от стойностите на колоната.

Допълнение Ето как да се справите с актуализирания въпрос с диапазони на Wagon_ID и Total_Weight . Вероятно има и други начини, но този се стори като „най-чистият“, което означава, че лично за мен беше най-лесно за четене :)

CREATE TABLE Goods_In_Wagon(
  Goods_ID NUMBER(whatever),
  Wagon_ID NUMBER(whatever),
  Total_Weight NUMBER(whatever),
  CONSTRAINT Check_WagID_Weight
    CHECK (
      (Wagon_ID < 90) OR
      (Wagon_ID BETWEEN 90 AND 99 AND Total_Weight > 10) OR
      (Wagon_ID BETWEEN 100 AND 110 AND Total_Weight > 20) OR
      (Wagon_ID BETWEEN 111 AND 120 AND Total_Weight > 30) OR
      (Wagon_ID > 120)
    )
)


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

  2. Инструменти за разработчици на Oracle за грешки на Visual Studio .net

  3. Как да генерирам оператори DELETE в PL/SQL, базирани на FK отношенията на таблиците?

  4. как да отпечатам цялата таблица с помощта на анонимен блок в pl sql?

  5. Оптимизиране на SELECT заявка, която работи бавно на Oracle, която се изпълнява бързо на SQL Server