我是Oracle的新手,我正在尝试创建一个表,但我一直收到无效字符警告。我尝试删除它并重新键入它,并检查了任何无效字符,但我似乎找不到任何无效字符。我的表创建代码是:
CREATE TABLE DEPARTMENT (
DNUMBER CHAR(1) PRIMARY KEY,
DNAME VARCHAR2(20),
MGRSSN CHAR(11),
MGRSTARTDATE CHAR(10),
CONSTRAINT DEPARTMENT_FK FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE(SSN));
CREATE TABLE EMPLOYEE (
SSN CHAR(11) PRIMARY KEY,
FNAME VARCHAR2(20),
MINIT CHAR(1),
LNAME VARCHAR2(20),
BIRTHDATE CHAR(10),
ADDRESS VARCHAR2(30),
SEX CHAR(1),
SALARY INTEGER,
SUPERSSN CHAR(11),
DNO CHAR(1),
CONSTRAINT EMPLOYEE_FK1 FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN),
CONSTRAINT EMPLOYEE_FK2 FOREIGN KEY (DNO) REFERENCES DEPARTMENT (DNUMBER));
2条答案
按热度按时间eoxn13cs1#
我在SQLplus中也遇到过同样的问题。我不得不从以前工作的其他文件中复制一些创建表sql并进行更改,更改后的sql可以正常工作。在Eclipse中比较这两个文件后,只有白色有差异。似乎文件字符格式有问题。
bfnvny8b2#
据我所知,这里没有“坏字符”问题,因为我无法引发最初报告的错误。但是,这些表上的两个约束-DEPARTMENT上的
DEPARTMENT_FK
和EMPLOYEE上的EMPLOYEE_FK1
-导致了问题。DEPARTMENT_FK约束试图在EMPLOYEE表创建之前引用它。在第二种情况下,自引用的EMPLOYEE_FK1约束无法创建,因为在为EMPLOYEE执行CREATETABLE时EMPLOYEE表不存在。要解决此问题,应从表定义中删除这些约束。然后应创建表,并在外部添加约束:
这样,将创建具有所需约束的表。
dbfiddle here
祝你好运。