为了账号安全,请及时绑定邮箱和手机立即绑定

在检查约束中使用日期,Oracle

在检查约束中使用日期,Oracle

慕莱坞森 2019-09-06 16:14:34
我试图检查添加以下约束,但Oracle返回如下所示的错误。ALTER TABLE Table1ADD (CONSTRAINT GT_Table1_CloseDateCHECK (CloseDate > SYSDATE),CONSTRAINT LT_Table1_CloseDateCHECK (CloseDate <= SYSDATE + 365)),CONSTRAINT GT_Table1_StartDateCHECK (StartDate > (CloseDate + (SYSDATE + 730))));错误:Error report:SQL Error: ORA-02436: date or system variable wrongly specified in CHECK constraint02436. 00000 -  "date or system variable wrongly specified in CHECK constraint"*Cause:    An attempt was made to use a date constant or system variable,           such as USER, in a check constraint that was not completely           specified in a CREATE TABLE or ALTER TABLE statement.  For           example, a date was specified without the century.*Action:   Completely specify the date constant or system variable.           Setting the event 10149 allows constraints like "a1 > '10-MAY-96'",           which a bug permitted to be created before version 8.
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

您不能在检查约束中使用SYSDATE。根据文件

检查约束条件不能包含以下结构:

  • 子查询和标量子查询表达式

  • 调用不确定的函数(CURRENT_DATE,
    CURRENT_TIMESTAMP,DBTIMEZONE,
    LOCALTIMESTAMP,SESSIONTIMEZONE,
    SYSDATE,SYSTIMESTAMP,UID,USER和USERENV)

  • 调用用户定义的函数

  • 取消引用REF列(例如,使用DEREF函数)

  • 嵌套表列或属性

  • 伪列CURRVAL,NEXTVAL,LEVEL或ROWNUM

  • 未完全指定的日期常量

对于10g第2版(10.2),请参阅约束,对于11g第2版(11.2),请参阅约束。

请记住,完整性约束是关于表数据的声明,它始终为 true。

无论如何:我不确切地知道你想要实现什么,但我认为你可以使用触发器来达到这个目的。


查看完整回答
反对 回复 2019-09-06
?
月关宝盒

TA贡献1772条经验 获得超5个赞

将sysdate写入列并将其用于验证。此列可能是您的审核列(例如:创建日期)


CREATE TABLE "AB_EMPLOYEE22"

(

   "NAME"     VARCHAR2 ( 20 BYTE ),

   "AGE"      NUMBER,

   "SALARY"   NUMBER,

   "DOB"      DATE,

   "DOJ"      DATE DEFAULT SYSDATE

);


Table Created    


ALTER TABLE "AB_EMPLOYEE22" ADD CONSTRAINT

AGE_CHECK CHECK((ROUND((DOJ-DOB)/365)) = AGE) ENABLE;


Table Altered


查看完整回答
反对 回复 2019-09-06
  • 3 回答
  • 0 关注
  • 940 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信