一个常见的问题是模拟其它数据库提供商的 autonumber 功能,该功能是使用某种顺序数字自动地填充某个字段。在 oracle 数据库中,不能指定一个顺序数字作为一个字段的 default 值;然而,可以使用触发器模拟这一功能。即使一个字段声明为 not null,也依然可以在 insert 语句中忽略这个字段,而使用一个触发器来填充该字段的值。注意使用 default 关键字比使用显式的 null 可读性要好。 create sequence t3_seq. create table t3(id$ integer constraint t3_pk primary key). create or replace trigger t3_autonumber before insert on t3 for each row begin if :new.id$ is null then 0select t3_seq.nextval into :new.id$ from dual. end if. end. / show errors.
insert into t3(id$) values (default). 0select * from t3.
id$ ---------- 1
可以使用sys_context 值的集合中的默认值来填充字段,并收集有关某处一个会话的重要信息: create table t4 ( when date default sysdate, db_domain varchar2(200) default sys_context(’userenv’,’db_domain’), host varchar2(256) default sys_context(’userenv’,’host’), ip_address varchar2(256) default sys_context(’userenv’,’ip_address’), language varchar2(256) default sys_context(’userenv’,’language’), protocol varchar2(200) default sys_context(’userenv’,’network_protocol’), terminal varchar2(200) default sys_context(’userenv’,’terminal’) ). insert into t4 (when) values (default). 0select * from t4.