如何在Oracle SQL Developer的“截止日期”字段中插入NULL

如何在Oracle SQL Developer的“截止日期”字段中插入NULL,sql,oracle,Sql,Oracle,当我尝试插入一个空值时,我得到下面的错误 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

当我尝试插入一个空值时,我得到下面的错误

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)
);

SQL错误:ORA-00904::无效标识符
可能是因为您的
外键
引用了一个不存在的列-检查列名拼写是否正确,这将解决此问题(然后您的
CREATE TABLE
语句将起作用)


如果您只是在
'1-FEB-2016'
中使用字符串,Oracle将使用
to_DATE()
函数隐式地尝试将字符串文字转换为
NLS_DATE_FORMAT
会话参数作为格式掩码。如果它们匹配,那么它将工作,但这是一个客户端变量,因此可以更改,然后查询将在代码没有更改的情况下中断(这是调试的一个难题)。简单的答案是,通过使用
到_date()
并指定格式掩码(根据上述查询)或使用ANSI日期文本
日期“2016-02-01”
(独立于NLS设置)来比较日期值。

在数字列中插入空字符串
'
,Oracle将插入
NULL

例如,
col_2
的数据类型为日期字段或
number(12,0)
(非日期字段的任何数据类型),SQL语句为
col_2
设置值如下:

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
);


(它是
NULL
,而不是
'NULL'
“NULL”

再次查看错误。
insert
正在获取ORA-00942。ORA-00904来自
创建表
。先把它修好。当您确实希望插入null时,它应该是
null
,而不是
'null'
——这是一个字符串文本,而不是null。而且不要像对待开始日期那样依赖于隐式日期转换。
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
);
insert into foo (col_1, col_2) values ('abc', '');
insert into foo (col_1, col_2) values ('abc', NULL);