ORA-00984此处不允许有oracle SQL中日期的列



Im正在将值插入此表

CREATE TABLE Flight ( 
FlightNumber         char(7) primary key,
ArrivalAirportCode   char(6)   references Airport  (Airport_code),
DepartureAirportCode char(6)   references Airport  (Airport_code),
AircraftNumber       varchar2(25) references Aircraft (AircraftNumber),
ArrivalDate          date,
ArrivalTime          Varchar2(5),
DepartureDate        date,
DepartureTime        varchar2(5)
); 

这是Im插入其中的值

INSERT INTO FLIGHT values
('CA3048',
'LHR', 
'EDI',
'N859E',
'14-NOV-2014',
'22:15', 
'14-NOV-2014', 
'20:15');

我在这里得到了我插入的第二个日期不允许的列错误,但不是第一个。我试着在日期前后加引号,但我又犯了一个错误。

2014年11月14日

为什么要在DATE列中插入字符串?'14-NOV-2014'STRING,而NOT日期。您不应该依赖隐式数据类型转换

始终使用TO_DATE和正确的格式掩码将字符串显式转换为DATE。

例如,

TO_DATE('14-NOV-2014','DD-MON-YYYY')

还有一件事,

出发时间varchar2(5)

毫无意义。您已经有一个DATE列,DATE也会有时间元素。

不需要单独的时间列。DATE的日期和时间元素都存储在7个字节中

Oracle总共存储7个字节的DATE。其中的每个字节存储DATE元素的值,如下所示:

Byte    Description
----    ------------------------------------------------
1       Century value but before storing it add 100 to it
2       Year and 100 is added to it before storing
3       Month
4       Day of the month
5       Hours but add 1 before storing it
6       Minutes but add 1 before storing it
7       Seconds but add 1 before storing it

您只需要拥有2个DATE列:

CREATE TABLE Flight ( 
FlightNumber         char(7) primary key,
ArrivalAirportCode   char(6)   references Airport  (Airport_code),
DepartureAirportCode char(6)   references Airport  (Airport_code),
AircraftNumber       varchar2(25) references Aircraft (AircraftNumber),
ArrivalDate          date,
DepartureDate        date
);

然后将值插入为:

INSERT INTO FLIGHT values
('CA3048',
'LHR', 
'EDI',
'N859E',
TO_DATE('14-NOV-2014 22:15:00','DD-MON-YYYY HH24:MI:SS'),
TO_DATE('14-NOV-2014 20:15:00','DD-MON-YYYY HH24:MI:SS')
);

更新

正如@GriffeyDog和@a_house_with_no_name在评论中提到的那样。

或者,您也可以使用ANSI文字,例如:

timestamp '2014-11-14 22:15'

相关内容

  • 没有找到相关文章

最新更新