我已經研究這個錯誤很長一段時間了,并閱讀了關于此的其他文章,但似乎無法找到為什么會出現錯誤的答案
列檢查約束不能參考其他列
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)
);
uj5u.com熱心網友回復:
雙引號表示識別符號。單引號用于文本文字。
你要:
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<>在這里擺弄
uj5u.com熱心網友回復:
是的,約束可以參考另一列,它被稱為“外鍵約束”。網上有很多關于語法的例子——它和你寫的有點不同……你需要定義列,然后在該列上設定一個約束,表明它是一個外鍵并參考另一個表。例如(簡化,只是一個成員表和一個保留表,對成員具有外鍵約束):
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”非常令人困惑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/391758.html
上一篇:AWSAthena查詢結構
下一篇:MySQL-Count連續數
