度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 3703|回复: 4
打印 上一主题 下一主题

[分享] ORACLE中默认值default的使用方法

[复制链接]

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
跳转到指定楼层
楼主
发表于 2020-6-18 14:23:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
在创建数据库表时,你可以指定一个 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 <table> 或INSERT INTO <table> 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 :new.id$ is null then
        select t3_seq.nextval into :new.id$ 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
scott.bn
MSHOME\SCOTT-LAP
AMERICAN_AMERICA.AL32UTF8
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

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
5#
 楼主| 发表于 2020-6-21 21:10:06 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
地板
 楼主| 发表于 2020-6-21 21:10:01 | 只看该作者
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9325

积分

论坛元老

Rank: 8Rank: 8

积分
9325
板凳
发表于 2020-6-19 17:34:28 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

348

主题

3572

帖子

9325

积分

论坛元老

Rank: 8Rank: 8

积分
9325
沙发
发表于 2020-6-19 17:33:57 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-11-23 21:55 , Processed in 0.118231 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表