ORA-01858:在预期数字时找到非数字字符

时间:2018-04-10 09:51:47

标签: sql oracle

我创建了以下两个表。

CREATE TABLE DELETE_CUSTOM
(
 column1 varchar2(30),
 column2 varchar2(30)
)

CREATE TABLE DELETE_CUSTOM_HIST
(
 column1 varchar2(30),
 column2 varchar2(30),
 ARCHIVAL_DATE DATE
)

我曾经将数据插入DELETE_CUSTOM_HIST,如下所示。

INSERT INTO DELETE_CUSTOM_HIST
      (SELECT DE.*, to_date('12/31/2017','mm/dd/yyyy')
         FROM DELETE_CUSTOM DE);

现在,我必须在两个表中添加一个新列。

ALTER TABLE DELETE_CUSTOM ADD column3 VARCHAR2(30);
ALTER TABLE DELETE_CUSTOM_HIST ADD column3 VARCHAR2(30);

如果我尝试使用以下相同的INSERT语句将数据插入DELETE_CUSTOM_HIST表, 我收到ORA-01858错误。

INSERT INTO DELETE_CUSTOM_HIST
      (SELECT DE.*, to_date('12/31/2017','mm/dd/yyyy')
         FROM DELETE_CUSTOM DE);
--ORA-01858: a non-numeric character was found when a numeric was expected.

我需要对INSERT语句进行哪些更改才能解决此问题。

注意:上面的insert语句在PLSQL包中。以上两张表实际上都有        很多专栏。我刚刚提到了几个专栏,以简单的方式解释我的问题。

3 个答案:

答案 0 :(得分:2)

INSERT INTO DELETE_CUSTOM_HIST(column1,column2,column3)
      (SELECT de.column1,de.column2,de.column3, 
to_date('12/31/2017','mm/dd/yyyy')
         FROM DELETE_CUSTOM DE);

显式写列列表并重试。

答案 1 :(得分:1)

你有:

CREATE TABLE DELETE_CUSTOM_HIST
(
 column1 varchar2(30),
 column2 varchar2(30),
 ARCHIVAL_DATE DATE,
 column3 varchar2(30)
);

尝试INSERT

varchar2类型列(COLUMN3表的DELETE_CUSTOM列)列

date类型列(ARCHIVAL_DATE表的DELETE_CUSTOM_HIST列)。

引发错误的原因是与varchar2date不匹配。

答案 2 :(得分:1)

两点。第一种是始终为这些语句明确列出列。不要在生产代码中使用* - 除非你真的知道自己在做什么。

INSERT INTO DELETE_CUSTOM_HIST (column1, column2, column3, archival_date)
     SELECT DE.column1, DE.column2, DE.column3, DATE '2017-12-31'
     FROM DELETE_CUSTOM DE;

备注(除列出列外):

  • 括号不适用于SELECT
  • 使用日期文字。 Oracle在这里支持ANSI标准,使用它。
  • 您确定只想要档案日期的日期部分吗?