oracle SQL错误:ORA-00911:无效字符

n3schb8v  于 2023-01-12  发布在  Oracle
关注(0)|答案(2)|浏览(261)

我是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));
eoxn13cs

eoxn13cs1#

我在SQLplus中也遇到过同样的问题。我不得不从以前工作的其他文件中复制一些创建表sql并进行更改,更改后的sql可以正常工作。在Eclipse中比较这两个文件后,只有白色有差异。似乎文件字符格式有问题。

bfnvny8b

bfnvny8b2#

据我所知,这里没有“坏字符”问题,因为我无法引发最初报告的错误。但是,这些表上的两个约束-DEPARTMENT上的DEPARTMENT_FK和EMPLOYEE上的EMPLOYEE_FK1-导致了问题。DEPARTMENT_FK约束试图在EMPLOYEE表创建之前引用它。在第二种情况下,自引用的EMPLOYEE_FK1约束无法创建,因为在为EMPLOYEE执行CREATETABLE时EMPLOYEE表不存在。
要解决此问题,应从表定义中删除这些约束。然后应创建表,并在外部添加约束:

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));

ALTER TABLE DEPARTMENT
  ADD CONSTRAINT DEPARTMENT_FK FOREIGN KEY (MGRSSN) REFERENCES EMPLOYEE(SSN);

ALTER TABLE EMPLOYEE
  ADD CONSTRAINT EMPLOYEE_FK1 FOREIGN KEY (SUPERSSN) REFERENCES EMPLOYEE (SSN);

这样,将创建具有所需约束的表。
dbfiddle here
祝你好运。

相关问题