【问题标题】:Oracle SQL setting the primary and foreign key with constraintOracle SQL 使用约束设置主键和外键
【发布时间】:2018-12-14 16:14:35
【问题描述】:
CREATE TABLE DriverTest
            (DTest_ID number(8),
            DTest_Type varchar2(50) NOT NULL,
            DTest_Date date NOT NULL,
            DTest_Result varchar2(50) NOT NULL,
            CONSTRAINT pk_DTestID PRIMARY KEY(DTest_ID));
            CONSTRAINT fk_EmployeeData FOREIGN KEY (Employee_ID) REFERENCES (Employee_ID));

CREATE TABLE Employee
        (Employee_ID number(8),
        Em_Name varchar2(50) NOT NULL,
        Em_Address varchar2(50) NOT NULL,
        Home_no number(15) NOT NULL,
        Em_no varchar2(30) NOT NULL,
        DoB date NOT NULL,
        Gender  varchar2(50) NOT NULL,
        NI_no number(10) NOT NULL,
        Annual_Salary number(10) NOT NULL,
        CONSTRAINT pk_EmployeeID PRIMARY KEY(Employee_ID));

为什么不执行?它适用于我的前两个表,供客户招聘,但员工到司机,它说:

'Employee_ID' 无效标识符,ORA-00904 和 00904 00000 - 无效 标识符

我以为我声明了主和外?可以请我帮忙,我看过类似的查询,但它们都有与我相同的脚本。

【问题讨论】:

    标签: sql oracle


    【解决方案1】:

    您的代码中有一些错误。 Here 是 dbfiddle 中的工作版本。

    一些问题:

    • Employees 表需要在被用于外键关系之前进行定义。因此,表格的顺序错误。
    • 需要声明用于外键的列。所以,EmployeeId 需要在DriverTests 中声明。
    • 您在第二个表定义中多了一个括号和分号。

    我将表格的名称更改为复数,因为我会这样命名它们。

    工作代码是:

    CREATE TABLE Employees (
            Employee_ID number(8),
            Em_Name varchar2(50) NOT NULL,
            Em_Address varchar2(50) NOT NULL,
            Home_no number(15) NOT NULL,
            Em_no varchar2(30) NOT NULL,
            DoB date NOT NULL,
            Gender varchar2(50) NOT NULL,
            NI_no number(10) NOT NULL,
            Annual_Salary number(10) NOT NULL,
            CONSTRAINT pk_EmployeeID PRIMARY KEY(Employee_ID)
     );
    
    CREATE TABLE DriverTests (
            DTest_ID number(8),
            Employee_ID number(8),
            DTest_Type varchar2(50) NOT NULL,
            DTest_Date date NOT NULL,
            DTest_Result varchar2(50) NOT NULL,
            CONSTRAINT pk_DTestID PRIMARY KEY (DTest_ID),
            CONSTRAINT fk_EmployeeData FOREIGN KEY (Employee_ID) REFERENCES Employees(Employee_ID)
    );
    

    【讨论】:

      【解决方案2】:

      您的创建表顺序不正确。需要先创建Employee表:

      CREATE TABLE Employee
          (Employee_ID number(8),
          Em_Name varchar2(50) NOT NULL,
          Em_Address varchar2(50) NOT NULL,
          Home_no number(15) NOT NULL,
          Em_no varchar2(30) NOT NULL,
          DoB date NOT NULL,
          Gender  varchar2(50) NOT NULL,
          NI_no number(10) NOT NULL,
          Annual_Salary number(10) NOT NULL,
          CONSTRAINT pk_EmployeeID PRIMARY KEY(Employee_ID)); 
      
      CREATE TABLE DriverTest
              (DTest_ID number(8),
              DTest_Type varchar2(50) NOT NULL,
              DTest_Date date NOT NULL,
              DTest_Result varchar2(50) NOT NULL,
              CONSTRAINT pk_DTestID PRIMARY KEY(DTest_ID));
              CONSTRAINT fk_EmployeeData FOREIGN KEY (Employee_ID) REFERENCES (Employee_ID));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2017-06-17
        • 1970-01-01
        • 2013-01-30
        • 2011-01-23
        • 2011-08-18
        相关资源
        最近更新 更多