Oracle确定删除是否将级联
我正在使用传统的oracle数据库系统(10g),没有详细的模式信息。我需要找出删除表中的特定记录是否会导致其他表中的级联删除。我已经检查了触发器。但是,由于引用约束,我不确定级联。有没有一个简单的方法来确定这一点 假设您知道(或可以确定)所涉及的外键约束,您可以查看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
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.*
视图授予权限通常是非常合理的。当然……除非您必须考虑数据安全性,如银行:)