SQL - Literal与格式字符串不匹配

时间:2014-09-10 18:43:10

标签: sql oracle

如果事先已经提出这个问题,我道歉。我一直在寻找答案,这个错误消息的所有答案似乎都涉及日期字段。但是,以下内容中没有日期字段:

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

仅供参考,这是一位同事来找我的问题。我不确定为什么他们会使用字符串来表示日期,但这是他们决定使用的格式。问题是......似乎&#34; Power Pass&#34;插入中的值抛出此特定错误...而不是日期字符串。

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?我完全被这个问题困惑了。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

除了Maheswaran Ravisankar指出的错误索引之外,您发布的代码不会引发错误。 IOW:您看到的错误必须来自您未发布的内容。以下是您可以尝试的一些事项:

  • 检查原始代码。我假设您对它进行了温和的编辑,并且该表并未真正称为“tableName”。也许还有另一个错误。可能你没有插入这张表,而是插入另一张。
  • 在真实数据库中查找user_dependencies并验证真的没有,ex(即没有触发器等)依赖于该表。或者使用像Toad这样的工具来检查表格。
  • 查找user_constraints以确认没有您未向我们展示的约束以及需要日期转换的约束。
  • 放下桌子并再次插入。您应该ORA-00942: table or view does not exist看到第1个子弹。