Nếu bạn muốn chỉ định một giá trị mặc định đơn giản, cách dễ nhất là khai báo giá trị đó trên bảng, sử dụng mệnh đề 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>
Điều này hoạt động với các ký tự hoặc cột giả như SYSDATE hoặc USER. Nếu bạn muốn lấy một giá trị phức tạp hơn với một hàm hoặc một trình tự do người dùng xác định, bạn sẽ cần sử dụng trình kích hoạt.
Đây là phiên bản mới của bảng ...
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>
... với một trình kích hoạt:
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>
Lưu ý rằng mặc dù mọi cột trên bảng đều có thể mặc định, nhưng tôi phải điền ít nhất một cột để làm cho SQL hợp lệ:
SQL> insert into t42 values ()
2 /
insert into t42 values ()
*
ERROR at line 1:
ORA-00936: missing expression
SQL>
Nhưng tôi có thể chuyển NULL sang COL4 để có được bản ghi hoàn toàn mặc định:
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>
Báo trước:trình kích hoạt của tôi sử dụng cú pháp 11g mới. Trong các phiên bản trước, chúng ta phải gán giá trị trình tự bằng câu lệnh SELECT:
select my_seq.nextval
into :new.col4
from dual;