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截图:

oracle设置默认值无效_第1张图片

当时我们使用的框架生成的插入语句是:

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

结果就造成默认值并没有生效:

oracle设置默认值无效_第2张图片

后来查询资料才明白原因:

其实对于默认值,Oracle支持两种方式:
1. Default关键字
2. 不指定列
先看第一种方式:

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

oracle设置默认值无效_第3张图片

再看第二种方式:

INSERT INTO TEST_DATE_TIME (ID)VALUES(2)

综上所述,Oracle的默认值处理要当心,如果项目应用中使用的是ORM工具,则必须要考虑对于字段为Null的处理,必要时在ORM工具中将Null转换为default或插入时去掉值为Null的字段。

转载于:https://www.cnblogs.com/luzhanshi/p/11425452.html

你可能感兴趣的:(oracle设置默认值无效)