2014-10-01 105 views
0

無論我在代碼中改變了什麼,我都會收到此錯誤。我的SQL代碼如下。ORA-00904:「OVERDUE_DAYS」:無效的標識符

CREATE TABLE movie_rent_records(
rent_record_id NUMBER(8), 
customer_id NUMBER(5), 
copy_id NUMBER(5), 
rented_date DATE, 
returned_date DATE, 
rent_fee NUMBER(5,2), 
overdue_fee NUMBER(5,2), 
overdue_days NUMBER(2), 
CONSTRAINT movie_rent_records_pk PRIMARY KEY(rent_record_id), 
CONSTRAINT movie_rent_records_fk1 FOREIGN KEY(customer_id) REFERENCES customers(customer_id), 
CONSTRAINT movie_rent_records_fk2 FOREIGN KEY(copy_id) REFERENCES movie_copies(copy_id)); 

INSERT語句的代碼如下:

INSERT INTO movie_copies(rent_record_id, customer_id, copy_id, rented_date, returned_date, rent_fee, overdue_fee, overdue_days) VALUES('00000001', '001', '00001', '5-SEP-2014', '6-SEP-2014', '2.99', '0.00', '00'); 

INSERT INTO movie_copies(rent_record_id, customer_id, copy_id, rented_date, returned_date, rent_fee, overdue_fee, overdue_days) VALUES('00000002', '002', '00002', '7-SEP-2014', '17-SEP-2014', '2.99', '7.92', '08'); 

INSERT INTO movie_copies(rent_record_id, customer_id, copy_id, rented_date, returned_date, rent_fee, overdue_fee, overdue_days) VALUES('00000003', '003', '00003', '10-SEP-2014', '11-SEP-2014', '2.99', '0.00', '00'); 

INSERT INTO movie_copies(rent_record_id, customer_id, copy_id, rented_date, returned_date, rent_fee, overdue_fee, overdue_days) VALUES('00000004', '004', '00004', '23-SEP-2014', '28-SEP-2014', '2.99', '2.97', '03'); 

INSERT INTO movie_copies(rent_record_id, customer_id, copy_id, rented_date, returned_date, rent_fee, overdue_fee, overdue_days) VALUES('00000005', '005', '00005', '21-SEP-2014', '22-SEP-2014', '2.99', '0.00', '00'); 

COMMIT; 

我不斷收到的錯誤是ORA-00904: 「OVERDUE_DAYS」:無效的標識符。任何幫助,將不勝感激。

回答

2

您正在插入錯誤的表格。你已經爲movie_rent_records顯示了DDL,這似乎是你試圖填充的,但是你的插入語句是movie_copies。因此,不言自明的:

INSERT INTO movie_rent_records(rent_record_id, customer_id, copy_id, rented_date, 
    returned_date, rent_fee, overdue_fee, overdue_days) 
VALUES('00000001', '001', '00001', '5-SEP-2014', '6-SEP-2014', '2.99', '0.00', '00'); 

什麼可能會混淆你的是,它在抱怨overdue_fees,而不是早期專欄,也許也是你movie_copies表不存在,像rent_record_id,大概一切除了copy_id。我可以看到,這可能會讓你專注於最後一列,錯過明顯的錯誤。這是因爲解析器傾向於通過語句反向工作 - 這只是它的一個小怪癖。 (我確定有或曾經是一個很好的理由來處理聲明的各個部分需要檢查以避免模糊不清,但有時候它仍然有點混亂)。

此外......你的插入是提供所有的字符串,所以很多隱式轉換將發生;以及可能無法正常工作的日期列。傳遞正確的類型,明確將在必要時:

INSERT INTO movie_rent_records(rent_record_id, customer_id, copy_id, rented_date, 
    returned_date, rent_fee, overdue_fee, overdue_days) 
VALUES(1, 1, 1, to_date('5-SEP-2014', 'DD-MON-YYYY'), 
    to_date('6-SEP-2014', 'DD-MON-YYYY'), 2.99, 0, 0); 
+0

謝謝你,我想我一直對這個長的小東西都是由我滑倒 – 2014-10-01 15:47:05