給我的情況如下。 使用以下列創建員工;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開發
感謝 庫馬爾
不相關但重要的是:爲什麼你將一個'DATE'存儲在一個varchar列中?這是在呼喚麻煩。 – 2013-03-12 08:45:03
此外:使用varchar列上的'to_char()'檢查日期格式的檢查約束完全沒有用處。我不會驚訝,如果 - 對於這個詞 - 對於日期列的愚蠢的定義抱歉給你在那裏進行的隱式轉換期間的錯誤。嘗試將empdate定義爲'DATE',並確保提供格式正確的日期。並告訴我們你的變量的內容。 – 2013-03-12 08:55:55
根據你的建議我已經改變了數據類型的日期和檢查約束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