はい、@ eaolsonが言ったように、主キー列にNOTNULLを指定する必要はありません。それらは自動的にNOTNULLに設定されます。
ただし、Oracleは、主キーが無効になったり、後で削除されたりした場合に備えて、NOTNULLを明示的に指定しなかったことを追跡します。
create table mytable (
col1 number,
col2 number not null
);
select table_name, column_name, nullable
from user_tab_columns where table_name = 'MYTABLE';
TABLE_NAME COLUMN_NAME NULLABLE
------------ ------------ ---------
MYTABLE COL1 Y
MYTABLE COL2 N
予想どおり、col1はnull可能であり、col2はNULLではありません。主キーは両方の列をNOTNULLに変更します。
alter table mytable add primary key (col1, col2);
select table_name, column_name, nullable
from user_tab_columns where table_name = 'MYTABLE';
TABLE_NAME COLUMN_NAME NULLABLE
------------ ------------ ---------
MYTABLE COL1 N
MYTABLE COL2 N
主キーを無効にするかドロップすると、両方の列が元の状態に戻り、co1は再びnull許容になります。
alter table mytable disable primary key;
select table_name, column_name, nullable
from user_tab_columns where table_name = 'MYTABLE';
TABLE_NAME COLUMN_NAME NULLABLE
------------ ------------ ---------
MYTABLE COL1 Y
MYTABLE COL2 N