0
如果此問題已被提前詢問,我很抱歉。我一直在四處尋找答案,並且此錯誤消息的所有答案似乎涉及日期字段。但是,以下沒有日期字段:SQL - 文字不匹配格式字符串
create table tableName (
trans_dest_name varchar2(50) not null,
mmddyyyy varchar2(8) not null,
constraint holiday_key primary key (trans_dest_name, mmddyyyy),
constraint trans_dest_name_ch check(REGEXP_LIKE(trans_dest_name,'^[a-zA-Z0-9 ]{0,50}$')),
constraint holiday_format check (
(to_number(substr(mmddyyyy, 0, 2))) < 13
AND (to_number(substr(mmddyyyy, 0, 2))) > 0
AND (to_number(substr(mmddyyyy, 2, 2))) < 32
AND (to_number(substr(mmddyyyy, 2, 2))) > 0
AND (to_number(substr(mmddyyyy, 4, 2))) = 20)
);
insert into tableName VALUES ('Power Pass', '01012015');
僅供參考,這是一個同事來找我的問題。我不完全確定他們爲什麼使用字符串來表示日期,但這是他們決定採用的格式。問題是......看起來好像插入中的「Power Pass」值拋出了這個特定的錯誤...而不是日期字符串。
SQL> SQL> insert into tableName VALUES ('Power Pass', '01012015')
*
ERROR at line 1:
ORA-01861: literal does not match format string
我最初的想法是,它是導致問題的日期字符串,可能是試圖將它轉換爲約束中的數字。它似乎並不是這樣,因爲當我說同事嘗試插入日期字符串作爲數字時會出現新的錯誤消息。
SQL> SQL> insert into tableName VALUES ('Power Pass', 01012015)
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected DATE got NUMBER
所以這部分很奇怪。爲什麼期望在該領域的日期?我完全被這個問題困擾。任何幫助將不勝感激。謝謝!
這不能是錯誤,除非第二列是'DATE' !!首先,當你試圖插入一個字符串時,Oracle試着使用'NLS_DATE_FORMAT'來隱式的日期轉換。然後,因爲它不匹配,它就拋出了一個錯誤。最後,當你嘗試使用一個數字時,錯誤信息是現在直截了當!這張桌子上的任何觸發器? – 2014-09-10 18:51:30
我給出的代碼塊中的所有內容都是原樣的。表和插入語句的創建是通過shell腳本完成的。這裏沒有觸發器。 – amthomas2112 2014-09-10 18:56:31
小提琴很好[這裏](http://sqlfiddle.com/#!4/6f885/1) – 2014-09-10 19:00:39