Ric*_*chN 3 sql oracle delete-row
假设所有外键都有适当的约束,是否有一个简单的SQL语句来删除DB中未引用的行?
简单的事情delete from the_table只是跳过包含子记录的任何行?
我试图避免手动循环表或添加类似的东西where the_SK not in (a,b,c,d).
您可以DELETE在10g中使用包含错误日志记录的扩展语句.
首先使用DBMS_ERRLOG创建一个记录表(这仅仅是一个原始表与一些附加前缀列的副本:ORA_ERR_MESG$, ..., ORA_ERR_TAG$)
execute dbms_errlog.create_error_log('parent', 'parent_errlog');
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用delete语句的LOG ERRORS子句捕获具有现有完整性约束的所有行:
delete from parent
   log errors into parent_errlog ('holding-breath')
   reject limit unlimited;
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"保持呼吸"评论将进入该ORA_ERR_TAG$列.
您可以在此处阅读完整的文档.
如果父表很大并且您只想删除一些杂散行,那么最终会得到一个parent_errlog基本上与表重复的parent表.如果这不好,你必须做很长的事情: