昨日のブログ投稿で、IDENTITY値を持つテーブルの作成について書きました。しかし、私が気に入っているOracle 12cの新機能は、シーケンスを列のデフォルト値の数値ジェネレーターにすることです。私が何を意味するかを理解するには、次の例を見てください:
SQL> create sequence test_seq; Sequence created. SQL> create table test_tab (id number default test_seq.NEXTVAL, val varchar2(20)); Table created.
ご覧のとおり、テストテーブルのID列には、作成したシーケンスのNEXTVALを使用するDEFAULT句があります。それでは、テーブルにデータを挿入しましょう。
SQL> insert into test_tab (val) values ('first row'); 1 row created. SQL> insert into test_tab (val) values ('second row'); 1 row created. SQL> commit; Commit complete. SQL> select * from test_tab; ID VAL ---------- -------------------- 1 first row 2 second row
ご覧のとおり、値の入力にはOracleシーケンスが使用されました。一見すると、これにより、データモデラーの作業が楽になります。これは、トリガーをコーディングしてNEXTVALを生成し、この値を列に割り当てるという従来のルートを使用する必要がないためです。ただし、このシーケンスによる列値の自動入力は、値を指定しない場合にのみ機能し、デフォルトのままにします。値を明示的に指定した場合、このメソッドはシーケンスを使用しません。トリガーが適切にコーディングされている場合、列のシーケンスの次の値の使用が強制されます。