SQL - 无法插入除默认 sysdate 之外的 DATE
SQL - Unable to insert a DATE apart from the default sysdate
我试图将 DATE 值插入我的 table 但是我收到以下错误:
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。我可以在 table 中取出数据的唯一方法是从插入语句中删除 tstDate。
在日期前后使用单引号。
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');
您缺少日期周围的引号:
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');
正如上面评论中 a_horse_with_no_name 所解释的那样,对于硬编码日期,您可能需要使用 date literal :DATE '2015-06-15'
另一方面,Oracle 也可以从 strings 转换为 date。如其他答案所示,隐式 使用客户端 NLS_DATE_FORMAT
参数。或者通过使用正确的参数调用 TO_DATE
函数, 显式 。在您的特定情况下:TO_DATE('01-JUN-15', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American')
使用 implicit 转换似乎 快速简便 但是,请注意 implicit 转换今天可能有效,但将来某些客户端使用不同的设置连接到数据库时会失败(比如客户端具有不同的 locale)。
所以,就我自己而言,我会推动使用日期文字:
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')
我试图将 DATE 值插入我的 table 但是我收到以下错误:
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。我可以在 table 中取出数据的唯一方法是从插入语句中删除 tstDate。
在日期前后使用单引号。
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');
您缺少日期周围的引号:
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');
正如上面评论中 a_horse_with_no_name 所解释的那样,对于硬编码日期,您可能需要使用 date literal :DATE '2015-06-15'
另一方面,Oracle 也可以从 strings 转换为 date。如其他答案所示,隐式 使用客户端 NLS_DATE_FORMAT
参数。或者通过使用正确的参数调用 TO_DATE
函数, 显式 。在您的特定情况下:TO_DATE('01-JUN-15', 'DD-MON-YY', 'NLS_DATE_LANGUAGE = American')
使用 implicit 转换似乎 快速简便 但是,请注意 implicit 转换今天可能有效,但将来某些客户端使用不同的设置连接到数据库时会失败(比如客户端具有不同的 locale)。
所以,就我自己而言,我会推动使用日期文字:
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')