将变量varchar2转换为数字,反之亦然| ORA-01722:无效的号码

时间:2014-03-06 09:36:40

标签: sql oracle

我正在使用update命令将列从一个sql表迁移到另一个sql表。使用以下查询进行更新时,我会获得ORA-01722: invalid number error。问题是项目表中的PID字段具有varchar2数据类型,docmeta表中的xproject_id具有数字数据类型。我现在有什么选择来迁移这些数据。

BEGIN
FOR X  IN(select projecttype,pid from PROJECT)  
 loop
  update docmeta d
set d.xProjectType=X.projecttype
where d.xproject_id=X.PID
and X.projecttype is not null;
END LOOP;
END;

1 个答案:

答案 0 :(得分:1)

您可以捕获异常:

begin
   for x in (select projecttype
                   ,pid
               from project
              where procecttype is not null)
   loop
      begin
         update docmeta d
            set d.xprojecttype = x.projecttype
          where d.xproject_id = x.pid;
      exception
         when others then
            if sqlcode = -1722
            then
               null;
            else
               raise;
            end if;
      end;
   end loop;
end;

另请注意,我已将非null项目类型的过滤器移动到查询。