2013年10月13日日曜日

[Oracle12c]defaultに指定できるようになったon null句

Oracle12cからは、default区に「on null」が指定できるようになったようだ。
このon nullは、insert文で挿入しようとしている値がnullの場合に、指定した値を挿入してくれます。

※defaultの場合は、insertで指定されていない場合のみ値を挿入してくれるけど、on nullを使用することで完全にnullを除外出来るようになる。
なお、on nullを指定するとnullが入ることがありえないので、not nullを指定しなくても暗黙的にnot nullになる。

create table文

以下のように、defaultの後にon null句を記述し、null時に代入する値を指定する。
create table on_null_test (
  id number not null,
  char_col char(1) default on null '0',    -- nullの場合は、「0」を代入する
  number_col number default on null 100,      -- nullの場合は、「100」を代入する
  primary key (id)
);

insert文を実行

-- 主キー以外は指定しない
INSERT INTO ON_NULL_TEST (id) values (1);
-- nullを代入
INSERT INTO ON_NULL_TEST (id, char_col, number_col) values (2, null, null);
-- null以外を代入
INSERT INTO ON_NULL_TEST (id, char_col, number_col) values (3, '1', 999);

実行結果

IDが1と2の行は、insertで項目を指定していない、nullを指定しているためデフォルトの値が挿入されている。
ID CHAR_COL NUMBER_COL
1 0                 100
2 0                 100
3 1                 999