SQL - 无法在默认sysdate之外插入DATE

时间:2015-01-03 16:56:42

标签: sql oracle date

我正在尝试将DATE值插入到我的表中但是我收到以下错误:

SQL Error: ORA-00984: column not allowed here
00984. 00000 -  "column not allowed here"

这是我的陈述:

INSERT INTO TstResults (tstcode, EmpID, fname, sname, tstDate, tstRslt)
VALUES ((Select tstcode from Tests where Freq ='6mnths')
       ,(Select EmpID from Employees where fname = 'Sam')
       ,'Sam'
       ,'Fisher'
       ,01-JUN-15
       ,'A');

每当我输入日期时,它都会给我上面的错误。在TstResults中,tstDate列的默认值为sysdate。我可以输出表中数据的唯一方法是从insert语句中删除tstDate。

3 个答案:

答案 0 :(得分:3)

正如上面评论中 a_horse_with_no_name 所述,对于硬编码日期,您可能希望使用date literalDATE '2015-06-15'

另一方面,Oracle也可以将字符串转换为日期。使用客户端NLS_DATE_FORMAT参数隐式,如其他答案中所示。或者通过使用正确的参数调用TO_DATE函数来显式 。在您的特定情况下:TO_DATE('01-JUN-15', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American')

使用隐式转换似乎快速简便但请注意,隐式转换今天可能有效,但将来会失败某些客户端使用不同的设置连接到数据库(例如,客户端具有不同的区域设置)。


所以,就我自己而言,我会推动使用日期文字:

INSERT INTO TstResults (tstcode, EmpID, fname, sname, tstDate, tstRslt)
VALUES ((Select tstcode from Tests where Freq ='6mnths')
       ,(Select EmpID from Employees where fname = 'Sam')
       ,'Sam'
       ,'Fisher'
       , DATE '2015-06-15'
       ,'A')

或者,如果你真的不想/不能使用日期文字:

INSERT INTO TstResults (tstcode, EmpID, fname, sname, tstDate, tstRslt)
VALUES ((Select tstcode from Tests where Freq ='6mnths')
       ,(Select EmpID from Employees where fname = 'Sam')
       ,'Sam'
       ,'Fisher'
       ,TO_DATE('01-JUN-15', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American')
       ,'A')

答案 1 :(得分:1)

在日期周围使用单引号。

INSERT INTO TstResults (tstcode, EmpID, fname, sname, tstDate, tstRslt)
VALUES
( (Select tstcode from Tests where Freq ='6mnths'), (Select EmpID from Employees where fname = 'Sam'), 'Sam', 'Fisher', '01-JUN-15', 'A');

答案 2 :(得分:1)

您在日期周围缺少引号:

INSERT INTO TstResults (tstcode, EmpID, fname, sname, tstDate, tstRslt)
VALUES ((Select tstcode from Tests where Freq ='6mnths')
       ,(Select EmpID from Employees where fname = 'Sam')
       ,'Sam'
       ,'Fisher'
       ,'01-JUN-15'
       ,'A');