Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java oracle中外键的外键_Java_Sql_Oracle - Fatal编程技术网

Java oracle中外键的外键

Java oracle中外键的外键,java,sql,oracle,Java,Sql,Oracle,我试图创建3个表,在创建第3个表EMPLOYEE_值时,我收到一个错误,指出此列列表没有匹配的唯一键或主键。我在同一个站点上浏览了堆栈溢出帖子,并尝试了不同的方法,但无法找出导致此问题的原因。如果有人能解释一下,我将不胜感激 CREATE TABLE P_EMPLOYEE_TYPE ( ID NUMBER(22) NOT NULL, NAME VARCHAR2(50) NOT NULL, PRIMARY KEY (ID) ); CREATE TABLE

我试图创建3个表,在创建第3个表EMPLOYEE_值时,我收到一个错误,指出此列列表没有匹配的唯一键或主键。我在同一个站点上浏览了堆栈溢出帖子,并尝试了不同的方法,但无法找出导致此问题的原因。如果有人能解释一下,我将不胜感激

CREATE TABLE P_EMPLOYEE_TYPE (
    ID NUMBER(22) NOT NULL,
    NAME VARCHAR2(50) NOT NULL,    
    PRIMARY KEY (ID)    
);


CREATE TABLE P_EMPLOYEE(
    P_ID NUMBER NOT NULL,
    EMPLOYEE_TYPE_ID  NUMBER NOT NULL,
    FOREIGN KEY (P_ID) REFERENCES P(ID),
    FOREIGN KEY (EMPLOYEE_TYPE_ID) REFERENCES P_EMPLOYEE_TYPE(ID),
    PRIMARY KEY(P_ID,EMPLOYEE_TYPE_ID)
    );

-- The following table is causing the issue 

CREATE TABLE EMPLOYEE_VALUES(
    ID NUMBER(4) NOT NULL,
    P_ID NUMBER,
    EMPLOYEE_TYPE_ID  NUMBER,
    VALUE VARCHAR2(100),
    PRIMARY KEY(ID,P_ID,EMPLOYEE_TYPE_ID),
    FOREIGN KEY (P_ID,EMPLOYEE_TYPE_ID) REFERENCES P_EMPLOYEE(P_ID,EMPLOYEE_TYPE_ID)
    );
你搞错了;employee_值不会失败,但p_employee会失败,因为它引用了不存在的p表。这个:

SQL> -- This table is missing
SQL>
SQL> CREATE TABLE p
  2  (
  3     id   NUMBER CONSTRAINT pk_p PRIMARY KEY
  4  );

Table created.
现在,剩下的桌子

不需要使用主键约束列指定NOTNULL;无论如何,它们不能为空 一个好的实践是,您应该命名约束,否则它们的名称由Oracle生成,很难在其他约束中找到 因此:


将P_ID、员工类型ID声明为主键。只需将主键放在他们的声明之后,非常感谢。这真的很有帮助。我已经有了Product表,问题是,正如您指定的,在我的查询中有一个NOTNULL关键字。我现在可以创建表了。再次感谢。
SQL> CREATE TABLE P_EMPLOYEE_TYPE
  2  (
  3     ID     NUMBER (22) CONSTRAINT pk_emptyp PRIMARY KEY,
  4     NAME   VARCHAR2 (50) NOT NULL
  5  );

Table created.

SQL> CREATE TABLE P_EMPLOYEE
  2  (
  3     P_ID               NUMBER,
  4     EMPLOYEE_TYPE_ID   NUMBER,
  5     --
  6     CONSTRAINT fk_empl_p FOREIGN KEY (P_ID) REFERENCES P (ID),
  7     CONSTRAINT fk_empl_emptyp FOREIGN KEY (EMPLOYEE_TYPE_ID)
  8        REFERENCES P_EMPLOYEE_TYPE (ID),
  9     CONSTRAINT pk_empl PRIMARY KEY (P_ID, EMPLOYEE_TYPE_ID)
 10  );

Table created.

SQL> CREATE TABLE EMPLOYEE_VALUES
  2  (
  3     ID                 NUMBER (4),
  4     P_ID               NUMBER,
  5     EMPLOYEE_TYPE_ID   NUMBER,
  6     VALUE              VARCHAR2 (100),
  7     --
  8     CONSTRAINT pk_empval PRIMARY KEY (ID, P_ID, EMPLOYEE_TYPE_ID),
  9     CONSTRAINT fk_empval_emp FOREIGN KEY (P_ID, EMPLOYEE_TYPE_ID)
 10        REFERENCES P_EMPLOYEE (P_ID, EMPLOYEE_TYPE_ID)
 11  );

Table created.