2013-03-12 65 views
0

給我的情況如下。 使用以下列創建員工;ORA-01722:將數據插入表中時出現「無效號碼」錯誤

·   EmpId 
·   EmpName 
·   EmpEmail 
·   EmpDate 

在OLTP中,我需要一次輸入一條記錄,後面的驗證將在後端完成;

·   EmpId should have a sequence generator 
·   No numeric values allowed in EmpName 
·   EmpDate should be in format mm/dd/yyyy 
·   Email Id should have following validations 
o Should contain ‘@’ sign and it should be only one 
o Should end with ‘.com’ 
o Email id should have more than 3 characters 

爲了這個,我已經創建了一個表,順序是這樣

create table emp_316599 
    (EmpId number(6), 
    EmpName varchar2(15)CONSTRAINT chk_EmpName 
    check(regexp_like(EmpName,'![0-9]+')), 
    EmpEmail varchar2(15) CONSTRAINT chk_EmpEmail 
    check((length(EmpEmail)>3) and 
     substr(EmpEmail,-4)='.com' and 
      instr(EmpEmail,'@',1,2)=0), 
    EmpDate varchar2(15) 
    CONSTRAINT chek_EmpDate 
    check(EmpDate=to_char(EmpDate,'mm-dd-yyyy'))); 

    Table created.  

create sequence Emp_SEQ 
increment by 1 
start with 1 
maxvalue 1000 
cache 20 
sequence created. 

這裏談到的問題。 當我試圖插入使用下面的命令它給我的錯誤。

insert into emp_316599 values(Emp_SEQ.NEXTVAL,'&EmpName','&EmpEmail','&EmpDate'); 

ORA-01722無效數字

請幫助我。

工作環境如下 DB:是Oracle 11g, 工具:PLSQL開發

感謝 庫馬爾

+1

不相關但重要的是:爲什麼你將一個'DATE'存儲在一個varchar列中?這是在呼喚麻煩。 – 2013-03-12 08:45:03

+0

此外:使用varchar列上的'to_char()'檢查日期格式的檢查約束完全沒有用處。我不會驚訝,如果 - 對於這個詞 - 對於日期列的愚蠢的定義抱歉給你在那裏進行的隱式轉換期間的錯誤。嘗試將empdate定義爲'DATE',並確保提供格式正確的日期。並告訴我們你的變量的內容。 – 2013-03-12 08:55:55

+0

根據你的建議我已經改變了數據類型的日期和檢查約束too.EmpDATE date CONSTRAINT chek_EmpDate check(EmpDate = to_date(EmpDate,'mm-dd-yyyy'));但是當我試圖插入它是扔我無效的月份。我的輸入如下kumar,raj @ gmail.com,24-11-2011和我的secong輸入是kumar,raj @ gmail.com,2011年11月24日,但我面臨與bot的輸入問題。幫我解決問題 – Kumar 2013-03-12 09:28:23

回答

0

,我收到了類似的錯誤,我固定使用這個定義之前執行的更新:

set define off; 
+0

嗨,我試圖按照你的建議做,但我得到錯誤---失蹤或無效option.ORA-00922 – Kumar 2013-03-12 08:38:29

+0

你看看那個:http://stackoverflow.com/questions/12549029/sql-error- ora-01722-invalid-number? – 2013-03-12 08:42:22

+0

是的,我看着那個。但我沒有得到錯誤的地方 – Kumar 2013-03-12 09:27:25

相關問題