繁体   English   中英

列检查约束不能引用 oracle 数据库中的其他列

[英]column check constraint cannot reference other columns in oracle database

我一直在研究这个错误很长一段时间,并阅读了其他关于此的文章,但似乎无法找到为什么它给出错误的答案

列检查约束不能引用其他列

CREATE TABLE reservations
(member_id CHAR(7)
CONSTRAINT res_memberid_pk PRIMARY KEY
CONSTRAINT res_memberid_fk REFERENCES members(member_id)
,date_sh DATE DEFAULT SYSDATE
CONSTRAINT res_datesh_ck CHECK(date_sh < TO_DATE ("23:00","hh24:mi"))
,terrain NUMBER(2)
CONSTRAINT res_ter_nn NOT NULL
,opponent_id CHAR(7)
CONSTRAINT res_opid_fk REFERENCES members(member_id)
);

双引号表示标识符。 单引号用于文本文字。

你要:

TO_DATE ('23:00','hh24:mi')

TO_DATE ('23:00','hh24:mi')将是当月第一天的 23:00(可能是也可能不是你想要的)。 但是,它在检查约束中不起作用,因为它没有指定年、月和日组件,并且会抛出:

ORA-02436: date or system variable wrongly specified in CHECK constraint

如果要对其进行约束,以使日期的时间部分小于 23:00,则:

CONSTRAINT res_datesh_ck CHECK(EXTRACT(HOUR FROM CAST(date_sh AS TIMESTAMP)) < 23)

db<> 在这里摆弄

是的,一个约束可以引用另一列,它被称为“外键约束”。 在语法上有很多 web 的例子——它与你写的有点不同......你需要定义列,然后在该列上设置一个约束,表明它是一个外键并引用另一个表。 例如(简化,只是一个成员表和一个对成员有外键约束的预订表):

create table members (
    member_id                      number generated by default on null as identity 
                                   constraint members_member_id_pk primary key
)
;

create table reservations (
    reserveration_id               number generated by default on null as identity 
                                   constraint reservations_reserveration_pk primary key,
    member_id                      number
                                   constraint reservations_member_id_fk
                                   references members on delete cascade
)
;


请注意,在名为“reservations”的表中命名您的主键列“member_id”非常令人困惑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM