Oracle - 忽略约束失败

时间:2011-12-08 03:47:25

标签: sql oracle

我有一个包含许多行的'staff'表,我想从此表中删除未使用的行(所有从未被任何其他表引用的员工。)

存在约束,如果在其他地方引用行,则无法从staff表中删除行。因此我希望我可以DELETE FROM STAFF删除未引用的行并离开其他行。

不幸的是,Oracle认为这是一个错误,因此只要遇到外部引用的行,整个查询就会因违反约束而失败。

有什么方法可以告诉Oracle只是忽略约束违规,保留记录,然后转到下一个?

2 个答案:

答案 0 :(得分:3)

您可以使用DML错误记录:

exec dbms_errlog.create_error_log(dml_table_name => 'STAFF'
    ,err_log_table_name => 'STAFF_ERRORS');

delete from STAFF
log errors into STAFF_ERRORS('Is referenced') reject limit 999999999;

然后可选择删除,截断或删除表STAFF_ERRORS。

答案 1 :(得分:1)

您可以使用PLSQL:

BEGIN
  FOR r IN (SELECT id FROM STAFF) LOOP
    begin
       delete STAFF where id = r.id;
    exception
       when others then
          null;
    end;
  END LOOP;
END;

但可能需要一些时间才能完成......