这是我的作业代码
CREATE TABLE workorders
(
wo# NUMBER(5) PRIMARY KEY,
proj# VARCHAR(10) NOT NULL FOREIGN KEY REFERENCES project(proj#),
wo_desc VARCHAR(30) NOT NULL UNIQUE,
wo_assigned VARCHAR(30),
wo_hours NUMBER(5) NOT NULL CHECK(wo_hours>0),
wo_start DATE,
wo_due DATE,
wo_complete CHAR(1),
CONSTRAINT workorders_wo_complete_chk CHECK(wo_complete in('Y','N'))
);
我不明白为什么oracle apex不让我创建这个表,它说
ORA-00907:缺少右括号
但是我反复检查了很多次,我想我确实有所有的括号?我在这里做错了什么?
先谢了
我只想在这些约束下创建此表,但我可以找到我所知道的任何错误。
2条答案
按热度按时间koaltpgm1#
Oracle 的 错误 消息 通常 不是 特别 有用 , 最 好 的 办法 是 逐 行 检查 代码 , 注解 掉 每 一 行 , 直到 找出 问题 所在 。
在 这种 情况 下 , 出错 的 行 是
中 的 每 一 个
问题 是 , 您 不 需要 使用 单词
FOREIGN KEY
来 定义 外键 - 您 只 需要 指定 它 引用 的 内容 。格式
然后 你 就 没事 了 。
db<>fiddle here 的 最 大 值
uxhixvfz2#
定义内嵌条件约束时,不使用
FOREIGN KEY
术语:VARCHAR2
,而VARCHAR
是VARCHAR2
的别名,因此最佳做法是始终使用VARCHAR2
。*但是,在定义外部外键时需要这些关键字(但这样会缺少逗号和列标识符):
使用(具名)内嵌条件约束的完整程式码如下:
并在整个过程中使用(命名的)非线性约束:
fiddle