Jika Anda ingin menetapkan nilai default sederhana, cara termudah adalah mendeklarasikannya di atas tabel, menggunakan klausa DEFAULT.
SQL> create table t42
2 ( col1 number default 1 not null
3 , col2 date)
4 /
Table created.
SQL> insert into t42 (col2) values (sysdate)
2 /
1 row created.
SQL> select * from t42
2 /
COL1 COL2
---------- ---------
1 03-AUG-11
SQL>
Ini bekerja dengan literal atau pseudocolumns seperti SYSDATE atau USER. Jika Anda ingin mendapatkan nilai yang lebih rumit dengan fungsi atau urutan yang ditentukan pengguna, Anda perlu menggunakan pemicu.
Ini adalah tabel versi baru...
SQL> create table t42
2 ( col1 number default 1 not null
3 , col2 date default sysdate
4 , col3 varchar2(30) default user
5 , col4 number )
6 /
Table created.
SQL>
... dengan pemicu:
SQL> create or replace trigger t42_trg
2 before insert or update
3 on t42
4 for each row
5 begin
6 if :new.col4 is null
7 then
8 :new.col4 := my_seq.nextval;
9 end if;
10 end;
11 /
Trigger created.
SQL> insert into t42 (col1, col2, col3)
2 values (99, sysdate, 'MR KNOX')
3 /
1 row created.
SQL> select * from t42
2 /
COL1 COL2 COL3 COL4
---------- --------- ------------------------------ ----------
99 03-AUG-11 MR KNOX 161
SQL>
Perhatikan bahwa meskipun setiap kolom pada tabel adalah default, saya harus mengisi setidaknya satu kolom untuk membuat SQL valid:
SQL> insert into t42 values ()
2 /
insert into t42 values ()
*
ERROR at line 1:
ORA-00936: missing expression
SQL>
Tapi saya bisa meneruskan NULL ke COL4 untuk mendapatkan catatan yang sepenuhnya default:
SQL> insert into t42 (col4) values (null)
2 /
1 row created.
SQL> select * from t42
2 /
COL1 COL2 COL3 COL4
---------- --------- ------------------------------ ----------
99 03-AUG-11 MR KNOX 161
1 03-AUG-11 APC 162
SQL>
Pemicu peringatan:pemicu saya menggunakan sintaks 11g baru. Di versi sebelumnya kita harus menetapkan nilai urutan menggunakan pernyataan SELECT:
select my_seq.nextval
into :new.col4
from dual;