Oracle确定删除是否会级联

Vik*_*kas 3 oracle cascade

我正在开发一个遗留的oracle数据库系统(10g),我没有详细的架构信息.我需要找出删除表中的特定记录是否会导致其他表中的级联删除.我检查了触发器.但是,由于参考约束,我不确定级联.有没有一种简单的方法来识别这个?

Jus*_*ave 9

假设您知道(或可以确定)所涉及的外键约束,您可以查看DELETE_RULE来自的列DBA_CONSTRAINTS

SELECT constraint_name, delete_rule
  FROM dba_constraints
 WHERE r_constraint_name = <<name of the primary key constraint>>
   AND r_owner = <<owner of the primary key constraint>>
   AND delete_rule = 'CASCADE'
Run Code Online (Sandbox Code Playgroud)

将显示引用特定主键约束的所有外键约束,并将级联删除.如果你关心的约束,会做一个SET NULL当父行被删除,你可以寻找行,其中的delete_ruleSET NULL为好.

请注意,如果您没有DBA_CONSTRAINTS表的权限,则可以使用,ALL_CONSTRAINTS而不是假设您实际上只关心您拥有SELECT权限的表.