sql >> データベース >  >> RDS >> Oracle

OracleSQLのチェック制約

    アウトオブライン制約を使用する:

    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. PostgreSQLで「user」という名前のデータベーステーブルを作成できません

    2. GROUP_BYの2つのLEFTJOINのGROUP_CONCATからの奇妙な重複動作

    3. Mysqlは、コンマ区切りのフィールドを単一の文字列と比較します

    4. 単純なSQL結合の理解?