2024年3月10日发(作者:)

ORACLE中默认值default的使用方法

在创建数据库表时,你可以指定一个 DEFAULT 值(即默认值)。对数据库字段使用默认值有助于将数据

库设计问题与应用程序代码隔离。

可以在以后某个时候通过一条 ALTER TABLE 命令改变一个字段的默认值,改变之后应用程序代码会立

即开始使用新值。

有一点是很重要的,即 DEFAULT 值只有当一个字段没有在 INSERT 或 MERGE 中指定值,或者使用

了 DEFAULT 关键字时才会使用。如果你不显式地声明一个 DEFULAT 值,Oracle 将隐式地将默认值

定义为 NULL,而且 DEFAULT 关键字也是这样。从 Oracle 9i开始,可以在 DEFAULT 子句中使用诸

如 SYSDATE 或 CURRENT_TIMESTAMPE 之类的伪字段。例如:

create table t1

(

id$ integer not null,

charcol char default 'Y',

datecol date default sysdate,

strcol varchar2(30) default user,

intcol integer default 12

);

insert into t1 (id$) values (1);

select * from t1;

ID$ C DATECOL STRCOL INTCOL

---------- - --------- ------------------------------ ----------

1 Y 28-MAY-04 SCOTT 12

DEFAULT 关键字与INSERT、MERGE 或UPDATE 语法比起来可以看上去没有那么必要,但是想一下

如果你希望在插入一列数据时使用所有默认值,那么你就不会这么认为了。Oracle 不接受INSERT INTO

或INSERT INTO
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小时内删除。
本文标签:使用顺序数字字段

发布评论

评论列表(有0条评论)
    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑维修网(fzithome.com)专业的电脑维修,笔记本维修,上门维修各种电脑,笔记本,平板等,快速上门.电脑知识频道内容覆盖:计算机资讯,电脑基础应用知识,各种电脑故障维修学习,电脑外设产品维修维护,病毒,软件,硬件,常识.