• <ul id="mayc0"></ul>
    <ul id="mayc0"><center id="mayc0"></center></ul>
    <strike id="mayc0"><input id="mayc0"></input></strike>
    <ul id="mayc0"></ul>
  • 始創于2000年 股票代碼:831685
    咨詢熱線:0371-60135900 注冊有禮 登錄
    • 掛牌上市企業
    • 60秒人工響應
    • 99.99%連通率
    • 7*24h人工
    • 故障100倍補償
    您的位置: 網站首頁 > 幫助中心>文章內容

    Oracle中默認值default的使用方法

    發布時間:  2012/9/12 17:17:41

    在創建數據庫表時,你可以指定一個 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

     


    本文出自:億恩科技【www.vbseamall.com】

    服務器租用/服務器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經營性ICP/ISP證:贛B2-20080012
  • 服務器/云主機 24小時售后服務電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務電話:0371-60135900
  • 專注服務器托管17年
    掃掃關注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權所有  地址:鄭州市高新區翠竹街1號總部企業基地億恩大廈  法律顧問:河南亞太人律師事務所郝建鋒、杜慧月律師   京公網安備41019702002023號
      1
     
     
     
     

    0371-60135900
    7*24小時客服服務熱線