如何使数据类型不匹配的列

时间:2017-11-14 12:58:43

标签: sql oracle

我在一个用户和另一个包含空记录的表中有一些记录。我想将该表的数据从一个 用户 迁移到 另一个 ,但我收到一个错误 ORA:01722 因为目标表的数据类型略有不匹配。如果不更改数据类型,我该怎么办才能解决此问题。 源表的数据类型是 -

Description of Source Table

目标表的说明 -

Description of Target Table

在不同用户的两个表中,只有一列是不匹配的数据类型 LOTFRONTAGE 。源表数据类型为 varchar2 ,目标表数据类型为数字

如何无效哪个列的数据类型不匹配

2 个答案:

答案 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 ;