【发布时间】:2020-04-16 14:35:34
【问题描述】:
我有一个查询,执行 5 分钟。我想减少这个时间。为此,我必须知道将触发哪些触发器以及将级联删除其他表中的哪些行。目标表中没有很多行。那么有没有办法查看行删除(Oracle DB)将执行什么?
查询看起来像:
DELETE FROM TABLE_NAME where FIELD = 'VALUE';
【问题讨论】:
我有一个查询,执行 5 分钟。我想减少这个时间。为此,我必须知道将触发哪些触发器以及将级联删除其他表中的哪些行。目标表中没有很多行。那么有没有办法查看行删除(Oracle DB)将执行什么?
查询看起来像:
DELETE FROM TABLE_NAME where FIELD = 'VALUE';
【问题讨论】:
要查找表上DELETE 事件的所有触发器,请使用以下查询:
SELECT *
FROM ALL_TRIGGERS
WHERE TABLE_NAME = '<YOUR_TABLE_NAME>'
AND TABLE_OWNER = '<YOUR_SCHEMA_NAME>'
AND TRIGGERING_EVENT LIKE '%DELETE%';
要查找将通过ON DELETE CASCADE 约束删除数据的所有表,请使用以下查询:
SELECT *
FROM USER_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'R'
AND DELETE_RULE = 'CASCADE'
AND R_CONSTRAINT_NAME = (
SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME = '<YOUR_TABLE_NAME>'
AND CONSTRAINT_TYPE = 'P'
);
【讨论】: