首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CURRENT_DATE甲骨文

CURRENT_DATE甲骨文
EN

Stack Overflow用户
提问于 2019-06-16 03:06:15
回答 2查看 587关注 0票数 1

我很难添加一个新的出生日期列,检查规则年龄在18到65岁之间。我在Oracle中使用sqplus时总是收到错误消息ORA00920需要您的帮助

代码语言:javascript
运行
AI代码解释
复制
ALTER TABLE Vendeur ADD (dateNaissance DATE, 
            dateDebutProjet DATE NOT NULL,  
            DateFinProjet DATE NOT NULL,
            CONSTRAINT chk_date_Birth CHECK ((TRUNC(CURRENT_DATE)-dateNaissance) 
            BETWEEN 18 AND 65),
            CONSTRAINT chk_date_Projet CHECK (DateFinProjet > dateDebutProjet));
EN

回答 2

Stack Overflow用户

发布于 2019-07-13 02:48:28

如果它可以帮助,没有触发器的解决方案(因为我们当时没有学习hem ):

ALTER TABLE Vendeur ADD (dateNaissance DATE, debutProjet DATE DEFAULT '01/01/1000' NOT NULL, finProjet DATE DEFAULT '02/01/1000' NOT NULL, dateDuJour Date DEFAULT CURRENT_DATE, CONSTRAINT chk_date_Projet CHECK (finProjet > debutProjet), CONSTRAINT chk_date_Birth CHECK ((dateDuJour - dateNaissance)\365 BETWEEN 18 AND 65) );

票数 1
EN

Stack Overflow用户

发布于 2019-06-17 19:20:57

检查约束cannot call non-deterministic functions like CURRENT_DATE。检查约束应该总是正确的,如果检查约束过期了,可能会发生奇怪的事情。

下面的示例代码显示了您尝试在检查约束中使用CURRENT_DATE时可能遇到的错误之一:

代码语言:javascript
运行
AI代码解释
复制
SQL> create table test1(a date);

Table created.

SQL> alter table test1 add constraint test1_ck1 check(a > date '2000-01-01');

Table altered.

SQL> alter table test1 add constraint test1_ck2 check(a > current_date);
alter table test1 add constraint test1_ck2 check(a > current_date)
                                                     *
ERROR at line 1:
ORA-02436: date or system variable wrongly specified in CHECK constraint

创建触发器以解决此问题:

代码语言:javascript
运行
AI代码解释
复制
create or replace trigger test1_date_gt_today
before update or insert of a on test1
for each row
begin
    if :new.a is null or :new.a < current_date then
        raise_application_error(-20000, 'The date cannot be earlier than today.');
    end if;
end;
/

下面是一个正在工作的INSERT和一个无法满足触发器中的条件的示例:

代码语言:javascript
运行
AI代码解释
复制
SQL> insert into test1 values(sysdate + 1);

1 row created.

SQL> insert into test1 values(sysdate - 1);
insert into test1 values(sysdate - 1)
            *
ERROR at line 1:
ORA-20000: The date cannot be earlier than today.
ORA-06512: at "JHELLER.TEST1_DATE_GT_TODAY", line 3
ORA-04088: error during execution of trigger 'JHELLER.TEST1_DATE_GT_TODAY'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56615763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档