Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
Sql 当我在hire表中插入值时,它在车辆ID中显示无效标识符。创建表时没有错误_Sql_Oracle_Sql Insert - Fatal编程技术网

Sql 当我在hire表中插入值时,它在车辆ID中显示无效标识符。创建表时没有错误

Sql 当我在hire表中插入值时,它在车辆ID中显示无效标识符。创建表时没有错误,sql,oracle,sql-insert,Sql,Oracle,Sql Insert,ORA-00904:“车辆识别号”:无效标识符请检查此代码段,它对我有效 -- Create a Database table to represent the "Vehicle" entity. CREATE TABLE Vehicle( Vehicle_ID INTEGER NOT NULL, Purchase_Date DATE, Vehicle_No_Plate VARCHAR(20), Brand

ORA-00904:“车辆识别号”:无效标识符

请检查此代码段,它对我有效

-- Create a Database table to represent the "Vehicle" entity.
CREATE TABLE Vehicle(
    Vehicle_ID  INTEGER NOT NULL,
    Purchase_Date   DATE,
    Vehicle_No_Plate    VARCHAR(20),
    Brand                       VARCHAR(20),
    Vehicle_Type    VARCHAR(20),
    Model                       VARCHAR(20),
    Color                       VARCHAR(20),
    -- Specify the PRIMARY KEY constraint for table "Vehicle".
    -- This indicates which attribute(s) uniquely identify each row of data.
    CONSTRAINT  pk_Vehicle PRIMARY KEY (Vehicle_ID)
);


-- Create a Database table to represent the "Hire" entity.
CREATE TABLE Hire(
    Hire_ID INTEGER NOT NULL,
    Hire_Date   DATE,
    Drop_In_Day DATE,
    fk1_Customer_ID INTEGER NOT NULL REFERENCES Customer (Customer_ID),
    fk2_Vehicle_ID  INTEGER NOT NULL REFERENCES Vehicle (Vehicle_ID) ,
    -- Specify the PRIMARY KEY constraint for table "Hire".
    -- This indicates which attribute(s) uniquely identify each row of data.
    CONSTRAINT  pk_Hire PRIMARY KEY (Hire_ID)
);

INSERT INTO Hire 
(Hire_ID, Hire_Date, Drop_In_Day, Customer_ID, Vehicle_ID)
 VALUES (10, '8/3/2017', '8/7/2017', 101, 112);
编辑 在您的情况下,如果希望保留fk1_*命名,则插入应该如下所示

CREATE TABLE Vehicle( Vehicle_ID INTEGER NOT NULL, 
                      Purchase_Date DATE,
                      Vehicle_No_Plate VARCHAR(20),
                      Brand VARCHAR(20), 
                      Vehicle_Type VARCHAR(20), 
                      Model VARCHAR(20), 
                      Color VARCHAR(20), 
                      CONSTRAINT pk_Vehicle PRIMARY KEY (Vehicle_ID) ); 

CREATE TABLE Hire
(
  Hire_ID NUMBER,
  Hire_Date DATE,
  Drop_In_Day DATE, 
  Customer_ID NUMBER,
  Vehicle_ID NUMBER,

  CONSTRAINT vei FOREIGN KEY (Vehicle_ID)
    REFERENCES Vehicle (Vehicle_ID),
  CONSTRAINT cust FOREIGN KEY (Customer_ID)
    REFERENCES Customer (Customer_ID)
);

CREATE TABLE Customer(Customer_id NUMBER, 
                      Name VARCHAR(20),
                      CONSTRAINT pk_Cust PRIMARY KEY (Customer_ID));

INSERT INTO Customer VALUES(100, 'Joe');

INSERT INTO vehicle VALUES(113, SYSDATE, 'PU-000-PU', 'FORD', null, null, null);

INSERT INTO Hire (Hire_ID, Hire_Date, Drop_In_Day, Customer_ID, Vehicle_ID)
 VALUES (10, '8/3/2017', '8/7/2017', 100, 112);


如果格式适合您的NLS_DATE_格式,则日期应该有效,但最好使用to_DATE函数。

您发布的表DDL和INSERT语句是:

INSERT INTO Hire 
(Hire_ID, Hire_Date, Drop_In_Day, fk1_Customer_ID, fk2_Vehicle_ID)
 VALUES (12, '8/3/2017', '8/7/2017', 101, 112);
以下是两个观察结果:

  • 插入到Hire
    语句中使用的列名“车辆ID”在Hire表中不存在 您的HIRE表应该有一个列来创建外键约束以引用主键

    -- Create a Database table to represent the "Hire" entity.
    CREATE TABLE Hire(
        Hire_ID INTEGER NOT NULL,
        Hire_Date   DATE,
        Drop_In_Day DATE,
        fk1_Customer_ID INTEGER NOT NULL REFERENCES Customer (Customer_ID),
        fk2_Vehicle_ID  INTEGER NOT NULL REFERENCES Vehicle (Vehicle_ID) ,
        -- Specify the PRIMARY KEY constraint for table "Hire".
        -- This indicates which attribute(s) uniquely identify each row of data.
        CONSTRAINT  pk_Hire PRIMARY KEY (Hire_ID)
    );
    
    INSERT INTO Hire 
    (Hire_ID, Hire_Date, Drop_In_Day, Customer_ID, Vehicle_ID)
     VALUES (10, '8/3/2017', '8/7/2017', 101, 112);
    
    所以,在HIRE表中有Vehicle_ID列作为外键引用Vehicle表中的Vehicle_ID列,该列是该表的主键。这同样适用于客户ID

  • “2017年8月3日”不是日期,而是字符串。始终使用
    TO_DATE
    或ANSI日期文字
    DATE'YYYY-MM-DD'
    将字符串显式转换为日期
  • 例如:

    CREATE TABLE Hire
    (
     Hire_ID INTEGER NOT NULL,
        Hire_Date   DATE,
        Drop_In_Day DATE,
      Customer_ID INTEGER NOT NULL,
      Vehicle_ID INTEGER NOT NULL,
      CONSTRAINT fk1_Customer_ID  FOREIGN KEY (Customer_ID)
        REFERENCES Customer (Customer_ID),
        CONSTRAINT fk2_Vehicle_ID   FOREIGN KEY (Vehicle_ID)
        REFERENCES Vehicle (Vehicle_ID)
    );
    

    创建表时是否在列名周围使用了双引号?带引号的标识符以双引号(“)开头和结尾。如果使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。-创建数据库表以表示“Vehicle”实体。创建表Vehicle(车辆ID整数不为空、购买日期日期、车辆编号牌VARCHAR(20)、品牌VARCHAR(20)、车辆类型VARCHAR(20)、型号VARCHAR(20)、颜色VARCHAR(20)——指定表“车辆”的主键约束——这表示哪个属性唯一标识每行数据。约束pk_车辆主键(车辆ID));欢迎来到StackOverflow!发布DDL for HIRE表。请编辑您的问题以发布更多详细信息,而不是在评论中。您提供的信息越多,得到的答案就越好。您的列在表
    HIRE
    中名为
    fk2_vehicle_id
    ,而不是
    vehicle_id
    中。声明对列fk1_Customer_ID,因为在插入中他使用了Customer_ID列名。@dmak2709同意,事实上缺少了很多东西。列和约束都缺少。违反了ORA-02291:完整性约束(C7202795.FK2_VEHICLE_ID)-未找到父密钥ORA-06512:在“SYS.DBMS_SQL”的第1721行。插入到Hire 2中。(租车ID、租车日期、入住日、客户ID、车辆ID)3.值(12,'8/3/2017','8/7/2017',101,112);显示如下this@FluffyExcuse首先,必须将数据插入父表customer和vehicle.ORA-02291:违反完整性约束(C7202795.SYS_C00256461)-未找到父键------它显示此ORA-02291:完整性约束(C7202795.SYS_C00256461)违反-未找到父密钥ORA-06512:在“SYS.DBMS_SQL”第1721行。插入到Hire 2中。(Hire_ID、Hire_Date、Drop_In_Day、fk1_Customer_ID、fk2_Vehicle_ID)3.值(12,'8/3/2017',8/7/2017',101,112);您是否有ID为101的客户和ID为112的车辆?请查看以下链接:是的,非常感谢:)
    TO_DATE('8/3/2017', 'DD/MM/YYYY')
    
    DATE '2017-03-08'