Oracle确定删除是否将级联

Oracle确定删除是否将级联,oracle,cascade,Oracle,Cascade,我正在使用传统的oracle数据库系统(10g),没有详细的模式信息。我需要找出删除表中的特定记录是否会导致其他表中的级联删除。我已经检查了触发器。但是,由于引用约束,我不确定级联。有没有一个简单的方法来确定这一点 假设您知道(或可以确定)所涉及的外键约束,您可以查看DBA\u约束中的DELETE\u RULE列 SELECT constraint_name, delete_rule FROM dba_constraints WHERE r_constraint_name = <&l

我正在使用传统的oracle数据库系统(10g),没有详细的模式信息。我需要找出删除表中的特定记录是否会导致其他表中的级联删除。我已经检查了触发器。但是,由于引用约束,我不确定级联。有没有一个简单的方法来确定这一点

假设您知道(或可以确定)所涉及的外键约束,您可以查看
DBA\u约束中的
DELETE\u RULE

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'
选择约束\u名称,删除\u规则
来自dba_约束
其中r_约束_名称=
和r_所有者=
并删除_规则='CASCADE'
将显示引用特定主键约束的所有外键约束,并将级联删除。如果您关心在删除父行时执行
SET NULL
的约束,则可以查找
delete\u规则
也是
SET NULL
的行


请注意,如果您在
DBA\u约束
表上没有权限,你可以使用
ALL_CONSTRAINTS
而不是假设你只关心你有
SELECT
特权的表。

我想我已经老了-10g现在是传统的了?为什么不使用
user_CONSTRAINTS
view?@Ben-如果你愿意,你当然可以使用
user_CONSTRAINTS
ALL_CONSTRAINTS
知道您拥有任何约束,或者您可以访问存在这些约束的任何表。有可能(尽管可能不太可能)存在一个不同架构中的表,而您对该表没有
select
访问权限,该表具有引用架构中表的外键。在这种情况下,您需要使用
dba\u约束
。我们有客户系统,而不是dba特权(而且我们无论如何都不想要它们)。因此,我们在同一个模式中设计所有内容,并且我们可以始终依赖于用户视图。我认为依赖于
dba\u约束的方法仅仅是如果你确信你拥有特权,你应该拥有特权,或者最好是一个dba(一般来说:)我想
所有的dba\u约束都会起作用,但是如果你有权访问另一个模式,那么可能会有问题。@Ben-不仅仅是dba有权访问
dba*
视图。对于只读开发人员用户来说,拥有
选择任何字典
权限或至少对他们需要的特定
dba.*
视图授予权限通常是非常合理的。当然……除非您必须考虑数据安全性,如银行:)