首页 > 解决方案 > 如何将失败的数据移动到oracle中的另一个表?

问题描述

将 EMP 表数据复制到另一个表并将失败的数据复制到另一个表

注意:在 emp2 表中有一个检查约束check sal > 1500,因此它不会移动数据。

我想将所有高于 1500 的萨尔从 emp 复制到 emp2 并将低于 1500 的萨尔复制到另一个表。

create or replace procedure p1 is cursor c1 is
  select * from emp;
  c number(10); 
begin
  for i in c1 loop
    insert into emp2(ename,ssno,empno) values(i.ename,i.sal,i.empno); 
end loop; 
end;

标签: sqloracleplsql

解决方案


两步:

insert into ok_data (ename, ssno, empno, sal)
  select ename, ssno, empno, sal
  from emp
  where sal <= 1500;

insert into failed_data (ename, ssno, empno, sal)
  select ename, ssno, empno, sal
  from emp
  where sal > 1500;

正如您的评论建议带有循环的 PL/SQL 那样,循环应该包含它自己的BEGIN-EXCEPTION-END块,这样 - 一旦插入OK_DATA失败,异常处理部分会将数据插入FAILED_DATA表中。像这样的东西:

begin
  for cur_r in (select ename, ssno, empno, sal from emp) loop
    begin
      insert into ok_data (ename, ssno, empno, sal)
        values (cur_r.ename, cur_r.ssno, cur_r.empno, cur_r.sal);

    exception
      when others then
        insert into failed_data (ename, ssno, empno, sal) 
          values (cur_r.ename, cur_r.ssno, cur_r.empno, cur_r.sal);
    end;
  end loop;
end;

推荐阅读