我在一个用户和另一个包含空记录的表中有一些记录。我想将该表的数据从一个 用户 迁移到 另一个 ,但我收到一个错误 ORA:01722 因为目标表的数据类型略有不匹配。如果不更改数据类型,我该怎么办才能解决此问题。 源表的数据类型是 -
目标表的说明 -
在不同用户的两个表中,只有一列是不匹配的数据类型 LOTFRONTAGE 。源表数据类型为 varchar2 ,目标表数据类型为数字。
如何无效哪个列的数据类型不匹配。
答案 0 :(得分:1)
insert into md.house(ID,MSSUBCLASS,MSZONING,
LOTFRONTAGE ,LOTAREA,LOTSHAPE,LOTCONFIG,
NEIGHBORHOOD,CONDITION1,BLDGTYPE,OVERALLQUAL,
YEARBUILT,ROOFSTYLE,EXTERIOR1ST,MASVNRAREA)
select ID,MSSUBCLASS,MSZONING
--hier
,TO_NUMBER(LOTFRONTAGE),
LOTAREA,LOTSHAPE,LOTCONFIG,NEIGHBORHOOD,CONDITION1,
BLDGTYPE,OVERALLQUAL,YEARBUILT,ROOFSTYLE,
EXTERIOR1ST,MASVNRAREA
from SYS.HOUSE_DATA;
答案 1 :(得分:0)
如何使数据类型不匹配的列无效。
使列无效是什么意思? Oracle中没有这样的工具。
您所能做的就是尝试识别LOTFRONTAGE
中的非数字字符。运行此查询以查找哪些值是非数字的。
SELECT
ID,
LOTFRONTAGE
FROM
yoursourcetable
WHERE REGEXP_LIKE(LOTFRONTAGE, '[^0-9]+');
获得ID和列值后,您可以更新这些值或在插入中替换它们。
update yoursourcetable SET LOTFRONTAGE = <numeric_value>
where ID = <id> and LOTFRONTAGE = '<non-numeric value>;
并运行INSERT
。
或强>
INSERT INTO yourdesttable
(col1,col2...
)
SELECT ID, REPLACE (LOTFRONTAGE ,<non-numeric>,<numeric>),... from yoursourcetable ;