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

时间:2014-04-04 21:45:46

标签: sql oracle ora-00911

我是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 个答案:

答案 0 :(得分:0)

我在SQLplus中也遇到了同样的问题。 我必须从以前工作的其他文件中复制一些创建表sql并进行更改,更改后的sql可以正常工作。 在Eclipse中比较这两个文件后,仅空白存在区别。文件字符格式似乎有问题。

答案 1 :(得分:0)

据我所知,这里没有“不良品格”问题,因为我无法引起最初报告的错误。但是,这些表上的两个约束-DEPARTMENT上的DEPARTMENT_FK和EMPLOYEE上的EMPLOYEE_FK1-引起了问题。 DEPARTMENT_FK约束尝试在创建EMPLOYEE表之前先对其进行引用。在第二种情况下,由于执行EMPLOYEE的CREATE TABLE时EMPLOYEE表不存在,因此无法创建自引用EMPLOYEE_FK1约束。

要解决此问题,应从表定义中删除这些约束。然后应该创建表,并在行外添加约束:

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

好运。