我创建了以下两个表。
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包中。以上两张表实际上都有 很多专栏。我刚刚提到了几个专栏,以简单的方式解释我的问题。
答案 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
列)。
引发错误的原因是与varchar2
和date
不匹配。
答案 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
。