[英]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.