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