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 テーブルを参照しようとします。2 番目のケースでは、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

幸運を祈ります。

于 2019-04-10T02:20:57.867 に答える