2016-03-18 61 views
3
CREATE TABLE pledge 
(
    pledge_ID   NUMBER NOT NULL , 
    pledge_endDate  DATE NULL , 
    pledge_startDate  DATE NULL , 
    pledge_amount  DECIMAL(9,2) NULL CONSTRAINT Currency_1322638346 CHECK (pledge_amount >= 0), 
    artist_userID  NUMBER NOT NULL, 
    follower_userID  NUMBER NOT NULL, 
CONSTRAINT XPKPledge PRIMARY KEY (pledge_ID), 
CONSTRAINT gets FOREIGN KEY (artist_userID) REFERENCES ArtistMember (user_ID), 
CONSTRAINT makes FOREIGN KEY (follower_userID) REFERENCES FollowerMember (user_ID) 
); 

當我嘗試插入空值時,出現下面的錯誤。如何在日期字段中插入空值Oracle SQL Developer

INSERT INTO pledge VALUES(559, 'null','1-FEB-2016', 3850, 85275, 88128); 

Error report - 
SQL Error: ORA-00904: : invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
Error starting at line : 209 in command - 
INSERT INTO pledge VALUES(559, 'NULL','1-FEB-2016', 3850, 85275, 88128) 
Error at Command Line : 209 Column : 13 
Error report - 
SQL Error: ORA-00942: table or view does not exist 
00942. 00000 - "table or view does not exist" 
*Cause:  
*Action: 
+3

再次查看錯誤。 'insert'正在獲得ORA-00942。 ORA-00904來自'create table'。首先解決它。當你想要插入null時,它應該只是'null',而不是'null' - 這是一個字符串字面值,而不是null。不要像隱含日期轉換那樣依賴於開始日期。 –

回答

4

SQL Error: ORA-00904: : invalid identifier可能正在造成的,因爲你的FOREIGN KEY s的引用不存在的列 - 檢查列名的拼寫正確,並且應該解決這個問題(和那麼你CREATE TABLE聲明將工作)。

CREATE TABLE ArtistMember (
    user_ID INT PRIMARY KEY 
); 

CREATE TABLE FollowerMember (
    user_ID INT PRIMARY KEY 
); 

CREATE TABLE pledge (
    pledge_ID   INT CONSTRAINT XPKPledge PRIMARY KEY, 
    pledge_endDate  DATE NULL, 
    pledge_startDate  DATE NULL, 
    pledge_amount  DECIMAL(9,2) NULL CONSTRAINT Currency_1322638346 CHECK (pledge_amount >= 0), 
    artist_userID  INT NOT NULL CONSTRAINT gets REFERENCES ArtistMember (user_ID), 
    follower_userID  INT NOT NULL CONSTRAINT makes REFERENCES FollowerMember (user_ID) 
); 

INSERT INTO ArtistMember VALUES (85275); 
INSERT INTO FollowerMember VALUES(88128); 
INSERT INTO pledge VALUES(
    559, 
    NULL,    -- Use NULL and not 'NULL' 
    DATE '2016-02-01', -- Use a Date literal and not a string literal 
    3850, 
    85275, 
    88128 
); 

如果你只是使用'1-FEB-2016'字符串那麼甲骨文將隱式嘗試使用TO_DATE()功能與NLS_DATE_FORMAT會話參數作爲格式掩碼字符串文字轉換。如果他們匹配,那麼它將工作,但這是一個客戶端變量,因此可以更改,然後查詢將中斷而不會更改代碼(並且很難調試)。簡單的答案是通過使用TO_DATE()並指定格式掩碼(按照上面的查詢)或使用ANSI日期文字DATE '2016-02-01'(與NLS設置無關)來確保您比較日期值。

+0

謝謝你做到了!這是我的引號也沒有。非常感謝。 – meeshi

相關問題