2016-03-18 64 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

相关问题