Sql 当我在hire表中插入值时,它在车辆ID中显示无效标识符。创建表时没有错误
ORA-00904:“车辆识别号”:无效标识符请检查此代码段,它对我有效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
-- 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
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'