CREATE TABLE ADMIN (
A_EMP_ID CHAR 5 BYTE NOT NULL,
ADMIN_START_DATE DATE DEFAULT SYSDATE NOT NULL,
ADMIN_END_DATE DATE NULL,
DIVERSITY_TRAINING_CERT CHAR(1 BYTE) DEFAULT 'N' NOT NULL,
ADMIN_TITLE CHAR(40 BYTE) NULL,
CONSTRAINT ADMIN_PK PRIMARY KEY(A_EMP_ID),
CONSTRAINT ADMIN_FK1
FOREIGN KEY(A_EMP_ID)
REFERENCES ADMIN(A_EMP_ID),
CONSTRAINT ADMIN_DIVERSITY_CERT
CHECK (DIVERSITY_TRAINING_CERT = 'N','Y'),
CONSTRAINT ADMIN_END_DATE
CHECK (<= 'ADMIN_START_DATE'),
);
Error starting at line : 1 in command -
CREATE TABLE ADMIN (
A_EMP_ID CHAR 5 BYTE NOT NULL,
ADMIN_START_DATE DATE DEFAULT SYSDATE NOT NULL,
ADMIN_END_DATE DATE NULL,
DIVERSITY_TRAINING_CERT CHAR(1 BYTE) DEFAULT 'N' NOT NULL,
ADMIN_TITLE CHAR(40 BYTE) NULL,
CONSTRAINT ADMIN_PK PRIMARY KEY(A_EMP_ID),
CONSTRAINT ADMIN_FK1
FOREIGN KEY(A_EMP_ID)
REFERENCES ADMIN(A_EMP_ID),
CONSTRAINT ADMIN_DIVERSITY_CERT
CHECK (DIVERSITY_TRAINING_CERT = 'N','Y'),
CONSTRAINT ADMIN_END_DATE
CHECK (<= 'ADMIN_START_DATE'),
)
Error report -
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
顶部是我的代码,当我运行它时,我从下半部分收到消息。 我认为这与我的外键有关,但我不知道确切的解决方案是什么。任何帮助将不胜感激。
你的说法有很多错误。
-
A_EMP_ID CHAR 5 BYTE
缺少围绕长度约束的(..)
- 您绝对不想将
CHAR
用于admin_title
.请改用VARCHAR2
。 -
DIVERSITY_TRAINING_CERT = 'N','Y'
不是有效的表达式。你可能想要diversity_training_cert IN ('N','Y')
- 虽然
FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id)
语法正确,但它没有意义。我猜你想要一个manager_id
或类似的东西。然后像FOREIGN KEY (manager_id) REFERENCES admin(a_emp_id)
.
或者,您可能打算引用employee
表。在这种情况下,a_emp_id
数据类型必须与该表的 PK 列的类型匹配。 -
CONSTRAINT ADMIN_END_DATE CHECK (<= 'ADMIN_START_DATE'),
有三个错误:- 列不得括在单引号中。所以它必须是
admin_start_date
而不是'admin_start_date'
- 检查约束需要适当的条件。
<= admin_start_date
不是条件,您需要将列与某些内容进行比较。大概admin_end_date
- 您在该表达式后
,
逗号,这也是错误的。
- 列不得括在单引号中。所以它必须是
将它们放在一起,您可以得到:
CREATE TABLE admin
(
a_emp_id CHAR(5 BYTE) NOT NULL,
admin_start_date DATE DEFAULT SYSDATE NOT NULL,
admin_end_date DATE NULL,
diversity_training_cert CHAR(1 BYTE) DEFAULT 'N' NOT NULL,
admin_title VARCHAR2(40 BYTE) NULL,
CONSTRAINT admin_pk
PRIMARY KEY(a_emp_id),
CONSTRAINT admin_fk1
FOREIGN KEY (a_emp_id) REFERENCES admin(a_emp_id),
CONSTRAINT admin_diversity_cert
CHECK (diversity_training_cert IN ('N','Y')),
CONSTRAINT admin_end_date
CHECK ( admin_end_date <= admin_start_date)
);
不相关,但是:也绝对没有必要用大写所有内容。
最后一个括号前有一个待处理的逗号。
CHAR 5 BYTE 应该是 CHAR
(5 BYTE((但无论如何都不应该使用 CHAR 尝试VARCHAR2或NVARCHAR2...
并且约束 <='ADMIN_START_DATE' 不正确。 这应该有两个值要比较