Oracle添加GETDATE()默认值约束报ORA-00904错误如何解决
报错根因
触发ORA-00904: invalid identifier的核心原因是函数不兼容:
GETDATE()是SQL Server系列数据库的内置取当前时间函数,Oracle数据库无此内置函数,SQL解析时会将其判定为不存在的无效标识符,直接抛出错误。Oracle中匹配date类型字段的取当前日期函数为SYSDATE,若需要高精度带时区时间可使用SYSTIMESTAMP。- 额外注意:你使用的
ADD CONSTRAINT ... DEFAULT ... FOR 字段名语法仅在Oracle 12c及以上版本支持,若使用11g及更早版本,该语法本身也会执行失败,需使用MODIFY字段的写法添加默认值。
修正后可执行代码
Oracle 12c及以上版本
ALTER TABLE Emp ADD CONSTRAINT df_date DEFAULT SYSDATE FOR hire_date;
Oracle 11g及更早版本
ALTER TABLE Emp MODIFY hire_date DEFAULT SYSDATE;
验证方式
执行插入语句时不指定hire_date字段值,查询即可看到字段自动填充为插入操作发生时的系统时间:
-- 插入测试数据,不赋值hire_date INSERT INTO Emp(Empno, Ename, Job) VALUES (0001, 'ZHANG', 'DBA'); -- 查询验证默认值是否生效 SELECT Empno, Ename, Hire_date FROM Emp WHERE Empno = 0001;
内容的提问来源于stack exchange,提问作者Sanjukta Mozumdar
相关产品推荐
相关产品推荐

