2014-03-13 160 views
3

這是表ORA-01858:在預期數字的地方找到了一個非數字字符?即使數值是數字?

CREATE TABLE Employee 
    (EmpID number(5) primary key, 
    SIN Number(9) Not null, 
    LastName Varchar2(25) Not null, 
    FirstName Varchar2(25), 
    Street Varchar2(30), 
    City Varchar2(25), 
    Province Char(2), 
    PostalCode Varchar2(7), 
    JobCode Number(4) Not null, 
    Foreign Key(JobCode) REFERENCES Job, 
    IncomeTax Char(1), 
    BirthDate Date, 
    HireDate Date, 
    JobCodeDate Date) 
    TABLESPACE users; 

這是我試圖插入行,只有三個數值和所有這些都是數字,據我所看到的。

INSERT INTO Employee VALUES(97319,516303417,'Novak','Gerry','6803 Park Ave.','Moose Jaw','SK','S6H 1X7',3000,'N','24-Aug-86','07-Jul-03','07-Jul-03'); 

ERROR at line 1: 
ORA-01858: a non-numeric character was found where a numeric was expected 
+0

我相信它抱怨日期。嘗試使用'to_date('25 -AUG-1986','DD-MON-YYYY') –

+0

@KevinBowersox這取決於他的NLS_DATE_FORMAT,對吧? – CJBS

+0

@CJBS不知道,我只是在玩預感,內部的日期存儲爲以毫秒爲單位的時間或數字,並傳遞字符串導致問題,我的sql提琴似乎工作。 –

回答

1
alter SESSION set NLS_DATE_FORMAT = 'DD-Mon-YY'; 

我只是打字這使得sql將在我的插入查詢中正確執行日期格式

+1

我得到ORA-01858(非數字字符被發現)爲不同的SQL;我的INSERT INTO沒有包含任何日期,但有一個觸發器正在設置CREATE_DATE列。我只在新的Windows10機器上安裝了ORA-01858(同樣的SQL在我的MacBook Pro和其他版本上運行良好)。一旦我輸入了上面的「更改會話」,我終於得到了更好/正確的錯誤(違反了ORA-02291完整性約束,導致我在實際中遇到了問題/錯誤修復)。我將嘗試弄清楚如何在DbVisualizer上設置NLS_DATE_FORMAT,但也要在JDBC驅動程序上設置(我在同一臺機器上的兩個地方都有誤導性錯誤) – Pierre

0

INSERT語句中列出的字段順序與Oracle預期的順序可能存在差異。我建議再次使用INSERT的完整語法(即在執行INSERT時指定字段名稱)。這樣,現場關聯的價值就顯而易見了。

因此,像這樣:

INSERT 
INTO Employee (EmpID, SIN, LastName, FirstName, Street, City, Province, PostalCode, JobCode, IncomeTax, BirthDate, HireDate, JobCodeDate) 
VALUES(97319,516303417,'Novak','Gerry','6803 Park Ave.','Moose Jaw','SK','S6H 1X7',3000,'N','1986-08-24','2003-07-07','2003-07-07'); 
1

我相信這個問題是與日期列嘗試使用此語法to_date('07-Jul-03','DD-MON-YY')

INSERT INTO Employee 
VALUES(97319,516303417,'Novak','Gerry','6803 Park Ave.','Moose Jaw','SK','S6H 1X7',3000,'N',to_date('24-Aug-86', 'DD-MON-YY'),to_date('07-Jul-03','DD-MON-YY'),to_date('07-Jul-03','DD-MON-YY')); 

SQL-小提琴:http://sqlfiddle.com/#!4/0e9df/2

+0

+1 SQLFiddle鏈接的好建議。 – CJBS

+0

是否有一種方法,我可以指定到SQL,這裏的所有日期應格式化的方式,而不是在每個插入指定它。 – null

相關問題