sql - 如何将失败的数据移动到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;
解决方案
两步:
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;
推荐阅读
- c - 解释 mutrace 输出
- scala - 关于Scala协方差的一些问题
- java - 提供在使用 mongoDB 时在 $project 中指定字段顺序的方法
- cypress - 在 cypress.io 的同一测试中访问两个不同的超级域
- windows - 在现有文件之上创建新文件
- c++ - 更改 std::set 以按 T 类型查找项目
- python - 使用级别值过滤熊猫 df
- c++ - 使用 C++ 将完整的以太网数据包发送到特定 ip
- javascript - 如何在固定导航栏下方制作可滚动的div
- c++ - 在 Windows 上将 filesystem::path 转换为 char*