VALUES () 作为有效的 SQL。必须指定至少一个字段,但是可以使用 DEFAULT 关键字来允许使用默认值,而非硬编码值,所以下面是有效的语法,它将使用所有
DEFAULT 值创建一行记录。
create table t2(charcol char default 'Y',datecol date default sysdate);
insert into t2 (charcol) values (default);
select * from t2;
C DATECOL
- ---------
Y 28-MAY-04
一个常见的问题
一个常见的问题是模拟其它数据库提供商的 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 :$ is null then
select t3_l into :$ from dual;
end if;
end;
/
show errors;
insert into t3(id$) values (default);
select * 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);
select * from t4;
WHEN
---------
DB_DOMAIN
------------------------------------------------------------------------------
HOST
------------------------------------------------------------------------------
IP_ADDRESS
------------------------------------------------------------------------------
LANGUAGE
------------------------------------------------------------------------------
PROTOCOL
------------------------------------------------------------------------------
TERMINAL
------------------------------------------------------------------------------
28-MAY-04
MSHOMESCOTT-LAP
AMERICAN_32UTF8
SCOTT-LAP
还可以使用伪字段SYS_GUID 来填充一个字段;它具有全局唯一性的优点,并且不需要顺序数字或触发
器开销:
create table t5(id$ raw(16) default sys_guid()
constraint t5_pk primary key);
insert into t5(id$) values (default);
select * from t5;
ID$
--------------------------------
643718A07DCC43F2AC95312FD43617BA
本文发布于:2024-03-10,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:使用顺序数字字段
发布评论