ora-01722-我知道这是什么意思,但仍然不是问题

时间:2019-04-01 13:06:25

标签: sql oracle sql-insert

我正在尝试将数据从旧表插入到新表中,但是出现错误ora-01722

我尝试做:to_number(trav_no),因为在旧表trav_no中是varchar,而在新表中其number(3,0)

我该怎么办?

Select trav_no,
       edit_cod,
       amount,
       user_id
from t1;

insert into t2 (trip_id, type_id,f_amount, upd_by)
select to_number(trav_no),
       to_number(edit_cod),
       amount,
       user_id
from t1;

1 个答案:

答案 0 :(得分:2)

很显然,您的旧表包含无法转换为数字的值。您需要确定受影响的行,以手动修复这些值或将其排除在INSERT语句中。

识别它们的最简单方法是使用正则表达式选择它们:

SELECT *
FROM T1
WHERE NOT REGEXP_LIKE(trav_no, '^[0-9]+$')
   OR NOT REGEXP_LIKE(edit_cod, '^[0-9]+$');

查询假定数字必须为正整数。如果没有,请相应地细化正则表达式。