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