我有一个包含许多行的'staff'表,我想从此表中删除未使用的行(所有从未被任何其他表引用的员工。)
存在约束,如果在其他地方引用行,则无法从staff表中删除行。因此我希望我可以DELETE FROM STAFF
删除未引用的行并离开其他行。
不幸的是,Oracle认为这是一个错误,因此只要遇到外部引用的行,整个查询就会因违反约束而失败。
有什么方法可以告诉Oracle只是忽略约束违规,保留记录,然后转到下一个?
答案 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;
但可能需要一些时间才能完成......