oracle設置默認值無效


一次做農行的項目,在向一個表插入數據時我們要求插入字符類型的操作日期和時間,我們這邊當時采取的是給日期和時間字段設置默認值的方法:下面我簡單還原一下當時的表結構

-- Create table
create table TEST_DATE_TIME
(
  id           INTEGER,
  operdate     VARCHAR2(20) default "TO_CHAR"(SYSDATE,'yyyy-MM-dd'),
  operdatetime VARCHAR2(20) default "TO_CHAR"(SYSDATE,'yyyy-MM-dd HH24:MI:SS')
)

PLSQL截圖:

當時我們使用的框架生成的插入語句是:

INSERT INTO TEST_DATE_TIME (ID,OPERDATE,OPERDATETIME)VALUES(0,null,null)

結果就造成默認值並沒有生效:

后來查詢資料才明白原因:

其實對於默認值,Oracle支持兩種方式:
1. Default關鍵字
2. 不指定列
先看第一種方式:

INSERT INTO TEST_DATE_TIME (ID,OPERDATE,OPERDATETIME)VALUES(1,default,null)

再看第二種方式:

INSERT INTO TEST_DATE_TIME (ID)VALUES(2)

綜上所述,Oracle的默認值處理要當心,如果項目應用中使用的是ORM工具,則必須要考慮對於字段為Null的處理,必要時在ORM工具中將Null轉換為default或插入時去掉值為Null的字段。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM