我正在尝试将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。
答案 0 :(得分:3)
正如上面评论中 a_horse_with_no_name 所述,对于硬编码日期,您可能希望使用date literal:DATE '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');