2014-09-10 3 views
0

Приносим извинения, если этот вопрос задан заранее. Я искал ответ на этот вопрос, и все ответы на это сообщение об ошибке, похоже, связаны с полями даты. Однако, не существует поле даты в следующем:SQL - Literal не соответствует строке формата

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'); 

FYI, это проблема коллега пришла ко мне с. Я не совсем уверен, почему они используют строку для представления даты, но это формат, с которым они решили пойти. Проблема в том, что ... кажется, что значение «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 в этой области? Я полностью ошеломлен этой проблемой. Любая помощь будет принята с благодарностью. Благодаря!

+2

Это не может быть ошибка, если второй столбец не является 'DATE' !! Во-первых, когда вы пытались вставить строку, Oracle попробовал неявное преобразование даты с помощью 'NLS_DATE_FORMAT' .. И тогда, поскольку это не соответствовало .., она выдала ошибку. Наконец, когда вы пытались с номером, сообщение об ошибке прямо сейчас! Любой триггер по этой таблице? –

+0

Все в кодовом блоке, который я дал, есть как есть. Создание таблицы и инструкции insert выполняется с помощью сценария оболочки. Здесь нет триггеров. – amthomas2112

+1

Fiddle is fine [здесь] (http://sqlfiddle.com/#!4/6f885/1) –

ответ

1

За исключением неправильной индексации, как указано Maheswaran Ravisankar, код, который вы опубликовали, не выдает ошибки. IOW: ошибка, которую вы видите, должна поступать из того, что вы не публиковали. Вот несколько вещей, которые вы можете попробовать:

  • Проверьте исходный код. Я предполагаю, что вы слегка отредактировали его, и таблица на самом деле не называлась «tableName». Возможно, еще одна ошибка проскользнула. Возможно, вы не вставляете в ЭТУ таблицу, а другую.
  • Поиск пользовательских зависимостей в реальной БД и проверка того, что на самом деле ничего, ex (т. Е. Нет триггера и т. Д.) Зависит от этой таблицы. Или используйте инструмент, подобный Toad, для изучения таблицы.
  • Подскажите user_constraints, чтобы убедиться, что нет ограничений, которые вы нам не показывали, и которые требуют преобразования даты.
  • откиньте стол и вставьте снова. Вы должны получить ORA-00942: table or view does not exist, иначе см. 1-ю пулю.
Смежные вопросы