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

Oracleでチェック制約を使用する方法

    はじめに

    Oracleチェック制約 比較などの論理式に基づいて整合性ルールを適用するために使用されます。使用される論理式はブール値を返す必要があります。

    給与値が100000を超えないように従業員の給与をチェック制約します。
    部門の場所のみをチェック制約します。 「DELHI」、「PATNA」、「MUMBAI」が許可されます。

    Oracleチェック制約のしくみ

    1. テーブルの列にチェック制約を定義します。チェック制約は、ブール値trueまたはfalseに評価される論理式です
    2. 行がテーブルに挿入または更新されると、Oracleは論理式をチェックします。
    3. Trueと評価された場合、Oracleはデータを受け入れ、挿入または削除を続行します
    4. falseと評価された場合、Oracleはデータを拒否します

    チェック制約に関する重要なポイント

    a。チェック制約は、列または列のグループに作成できます。
    b。列には1つ以上のチェック制約がある場合があります。
    c。制約が評価される順序は定義されていません
    d。他のタイプの整合性制約のいずれかが必要なチェックを提供できる場合は、CHECK制約を使用しないでください。
    e。複数の制約を定義するときは、それらが互いに競合しないことを確認してください

    チェック制約の制限

    (1)条件は、挿入または更新される行の値を使用して評価できるブール式である必要があります。
    (2)条件に
    aを含めることはできません。サブクエリまたはシーケンス。
    b。 SYSDATE、UID、USER、またはUSERENVSQL関数。
    c。疑似列LEVEL、PRIOR、またはROWNUM。
    d。ユーザー定義のSQL関数。
    (3)チェック制約は他のテーブルの列を参照できません
    (4)チェック制約はOracleビューで作成できません

    Oracleでチェック制約を作成する方法

    Oracleチェック制約は、create table句を使用して、またはaltertable句を使用してテーブルを作成した後に作成できます。
    テーブルを作成すると、チェック制約をインライン列構文またはアウトオブラインで作成できます。構文。

    インライン構文

    SQL> CREATE TABLE "EMP"
     ("EMPNO" NUMBER(4,0),
     "ENAME" VARCHAR2(10),
     "JOB" VARCHAR2(9),
     "MGR" NUMBER(4,0),
     "HIREDATE" DATE, 
     "SAL" NUMBER(7,2) check(SAL > 1000),
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0),
      CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
      );
    
     Table created.

    チェック制約にカスタム名を付けることもできます

    SQL> CREATE TABLE "EMP"
        ("EMPNO" NUMBER(4,0),
         "ENAME" VARCHAR2(10),
         "JOB" VARCHAR2(9),
         "MGR" NUMBER(4,0),
         "HIREDATE" DATE,
         "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000),
         "COMM" NUMBER(7,2),
         "DEPTNO" NUMBER(2,0),
          CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
          );
     
    Table created.

    アウトオブライン構文

    SQL> CREATE TABLE "EMP"
     ("EMPNO" NUMBER(4,0),
     "ENAME" VARCHAR2(10),
     "JOB" VARCHAR2(9),
     "MGR" NUMBER(4,0),
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2) ,
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0),
     CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
     check(SAL > 1000)
     );
    
     Table created.

    チェック制約にカスタム名を付けることもできます

    SQL> CREATE TABLE "EMP"
       ("EMPNO" NUMBER(4,0),
       "ENAME" VARCHAR2(10), 
       "JOB" VARCHAR2(9),  
       "MGR" NUMBER(4,0),
       "HIREDATE" DATE,
       "SAL" NUMBER(7,2) ,
       "COMM" NUMBER(7,2),
       "DEPTNO" NUMBER(2,0),
       CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
       constraint CHECK_SAL check(SAL > 1000)
        );
     
    Table created.

    複数の列が含まれる場合、アウトオブライン構文のみを使用します
    インラインシンタックスを使用すると、エラーがスローされます

    SQL> CREATE TABLE "EMP"
        ("EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),
        "JOB" VARCHAR2(9),
        "MGR" NUMBER(4,0),
        "HIREDATE" DATE,
        "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000 and 
         DEPTNO is not null),
        "COMM" NUMBER(7,2),
        "DEPTNO" NUMBER(2,0),
        CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
        );
       
    "SAL" NUMBER(7,2) constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null),
                                                                                      *
     ERROR at line 7:
     ORA-02438: Column check constraint cannot reference other columns
    
     SQL> CREATE TABLE "EMP"
         ("EMPNO" NUMBER(4,0),
          "ENAME" VARCHAR2(10),
          "JOB" VARCHAR2(9),
          "MGR" NUMBER(4,0),
          "HIREDATE" DATE,
          "SAL" NUMBER(7,2) ,
          "COMM" NUMBER(7,2),
          "DEPTNO" NUMBER(2,0),
          CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO"),
          constraint CHECK_SAL check(SAL > 1000 and DEPTNO is not null)
           );
     Table created.

    これで、テーブルの変更構文を使用してテーブルを作成した後に、チェック制約を追加できます

    SQL> CREATE TABLE "EMP"
        ("EMPNO" NUMBER(4,0),
        "ENAME" VARCHAR2(10),
        "JOB" VARCHAR2(9),
        "MGR" NUMBER(4,0),  
        "HIREDATE" DATE,
        "SAL" NUMBER(7,2) ,
        "COMM" NUMBER(7,2),
        "DEPTNO" NUMBER(2,0),  
        CONSTRAINT "PK_EMP" PRIMARY KEY ("EMPNO")
        );
     Table created.
    
     SQL> alter table "EMP" add constraint  CHECK_SAL 
         check(SAL > 1000 and   DEPTNO is not null);
     Table altered.

    テーブルのチェック制約を見つける方法

    次の辞書のビューには、制約に関する情報が含まれています
    ALL_CONSTRAINTS
    ALL_CONS_COLUMNS
    USER_CONSTRAINTS
    USER_CONS_COLUMNS
    DBA_CONSTRAINTS
    DBA_CONS_COLUMNS

    SQL> column CONSTRAINT_NAME format a20
    SQL> column SEARCH_CONDITION format a50
    SQL> SELECT Constraint_name, Search_condition  
         FROM User_constraints  
         WHERE Table_name = 'EMP'  AND  
         Constraint_type = 'C';

    ここで、Cはチェック制約を表します

    チェック制約を有効/無効にする方法

    SQL> alter table "EMP"  disable constraint CHECK_SAL;
     Table altered.
     SQL> alter table "EMP"  enable  constraint CHECK_SAL;
     Table altered.

    チェック制約を削除する方法

     alter table "EMP"  drop constraint CHECK_SAL;
     Table altered. 

    チェック制約の例

    col1 >= 0 AND col1 < 85857 user_override in ('Y','N') class = 0 OR class = 1 hwm > 0
    cm = 0 OR cm = 1
    SEQ >= 0
    status = 0 OR status = 1
    >

    また読む
    alter table add primary key oracle:oracleの主キーはテーブル内の行を一意に識別します。 nullにすることはできず、テーブルの作成時またはテーブルの作成後に作成できます。
    Oracleの非NULL制約:Oracleの非NULL制約は、テーブルの列に非NULL値を適用するために使用されます。 null制約を追加、削除する方法を確認してください。
    Oracleの一意キー:一意キーは、テーブルの列に一意キーを適用し、行をすばやく識別するのに役立ちます。使用可能なインデックスがない場合、Oracleはキーの一意のインデックスを作成します。
    外部キー制約の削除oracle:altertableコマンドを使用してOracleの制約を削除できます。 oracleの同じコマンド
    deleteコマンドを使用して、主キー、外部キー、チェック、null以外、および一意性制約を削除できます
    https://docs.oracle.com/cd/B19306_01/server.102/b14200 /clauses002.htm

    推奨コース

    OracleSQLの優れたUdemyコースは次のとおりです。
    Oracle-Sql-ステップバイステップ:このコースでは、基本的なSQL、結合、テーブルの作成とその構造の変更、ビューの作成、ユニオン、ユニオンなどすべてについて説明します。 。 SQL初心者のための素晴らしいコースと必須のコース
    完全なOracleSQL認定コース :これは、SQL開発者のスキルに対応できるようになりたい人にとっては良いコースです。わかりやすい説明コース
    OracleSQLDeveloper:Essentials、Tips and Tricks :OracleSql開発者ツールは多くの開発者によって使用されています。このコースでは、それを効果的に使用して生産的なSQL開発者になるための秘訣とレッスンを提供します。
    Oracle SQL Performance Tuning Masterclass 2020 :パフォーマンスの調整は、重要で最も求められているスキルの1つです。これは、それについて学び、SQLパフォーマンスの調整を開始するための良いコースです


    1. Java SQLData-リスト/配列を使用してユーザーオブジェクトにキャストしますか?

    2. MS SQL Server 2005の日付から週番号を取得しますか?

    3. Mtop(MySQL Database Server Monitoring)をRHEL / CentOS 6/5/4、Fedora17-12にインストールします

    4. Oracleデータベースで連想配列を作成する方法