0

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

2 回答 2

0

据我所知,这里没有“坏字符”问题,因为我无法引发最初报告的错误。但是,这些表(DEPARTMENT_FKDEPARTMENT 和EMPLOYEE_FK1EMPLOYEE)上的一些限制正在导致问题。DEPARTMENT_FK 约束尝试在创建 EMPLOYEE 表之前对其进行引用。在第二种情况下,自引用 EMPLOYEE_FK1 约束创建失败,因为执行 CREATE TABLE for EMPLOYEE 时 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在这里

祝你好运。

于 2019-04-10T02:20:57.867 回答
0

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

于 2018-07-09T07:56:10.663 回答