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

Oracleで非ヌル制約を作成する方法

    OracleのNull制約ではないもの

    OracleのNotNull制約は、テーブルの列にNotNull値を適用するために使用されます。したがって、その列にnullを挿入しようとすると、エラーがスローされます。

    null以外の制約を作成する方法

    非ヌル制約はテーブルの作成時に定義されます。または、後でテーブルを変更して、列を非ヌルに変更することもできます。例を見てみましょう。

    テーブルの作成
    null以外の制約が列にインラインで指定されています。

    SQL> CREATE TABLE "EMP"
        ("EMPNO" NUMBER(4,0) Not Null,
         "ENAME" VARCHAR2(10) Not null,
         "JOB" VARCHAR2(9),  
         "MGR" NUMBER(4,0),       
         "HIREDATE" DATE,
         "SAL" NUMBER(7,2) ,  
         "COMM" NUMBER(7,2),
         "DEPTNO" NUMBER(2,0)
          );
    
     Table created. 

    ここでは、テーブルempにnullではない2つの制約を定義しました。以下のクエリを使用して、テーブルのNotnull制約を確認できます

    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';

    Not Null制約もチェック制約として定義され、nullではない列名として検索条件があります

    テーブル作成後にNot制約を追加する

    テーブルを変更して、非ヌル制約を追加できます

    SQL> alter table emp modify ("HIREDATE" not null);
     Table altered.

    既存の列にnullデータがある場合、このステートメントは失敗します

    SQL> SELECT Constraint_name, Search_condition
         FROM User_constraints
         WHERE Table_name = 'EMP'  AND
         Constraint_type = 'C'

    NotNull制約にもカスタム名を付けることができます。これがそれを示す例です

    SQL> CREATE TABLE "EMP"
     ("EMPNO" NUMBER(4,0) Constraint EMP_NOTNULL Not Null,  
     "ENAME" VARCHAR2(10) Not null,
     "JOB" VARCHAR2(9),
     "MGR" NUMBER(4,0),
     "HIREDATE" DATE,
     "SAL" NUMBER(7,2) ,
     "COMM" NUMBER(7,2),
     "DEPTNO" NUMBER(2,0)
      );
    
     Table created.
     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';
     SQL> alter table emp modify ("HIREDATE" Constraint H_NOTNULL  Not    Null);
     
    Table altered.
     SQL> SELECT Constraint_name, Search_condition
          FROM User_constraints
          WHERE Table_name = 'EMP'  AND
          Constraint_type = 'C';

    非ヌル制約を削除する方法

    null値を受け入れるように列を変更する必要があります

    SQL>alter table emp modify "HIREDATE" Null;
    
    Table altered.
    
    SQL> SELECT Constraint_name, Search_condition
         FROM User_constraints
         WHERE Table_name = 'EMP'  AND
         Constraint_type = 'C';

    alter tabledropconstraintコマンドを使用してnotnull制約を削除することもできます

    SQL> alter table emp drop constraint  EMP_NOTNULL ;
    Table altered;
    
    SQL> SELECT Constraint_name, Search_condition
         FROM User_constraints
         WHERE Table_name = 'EMP'  AND
         Constraint_type = 'C';

    null値を含む列にnull以外の制約を追加する方法

    null値を含む列にnull以外の制約を追加しようとすると、すべての行がnull以外の制約について既存のすべての行を検証するため、そのコマンドは失敗します。既存のnull値を保持し、この列のnull以外の値が含まれている将来の行を確認したい場合があります。その場合は、novalidate句を使用して制約を有効にすることができます。この句を使用すると、既存の行はチェックされませんが、将来の行はチェックされます

    alter table emp modify "HIREDATE" not Null novalidate;

    また読む
    主キーを削除するoracle
    oracleの外部キー
    Oracleの一意キー制約
    oracleのテーブルのすべての制約を確認する方法
    oraclealtertable modify column type
    https://docs.oracle.com/cd/B28359_01/server.111/b28310/general005.htm#ADMIN11554


    1. SQLServerでネストされたcaseステートメントロジックを実行するための最良の方法

    2. UTL_FILE.FOPEN()プロシージャがディレクトリのパスを受け入れていませんか?

    3. SQLiteで月の最初の月曜日を取得する

    4. SQL Serverで「smalldatetime」を「datetime」に変換する(T-SQLの例)