oracle 确定DROP TABLE是否成功

ebdffaop  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(146)

是否可以在不执行DROP TABLE table_name操作的情况下确定该操作是否会成功?
我试着用自治事务和回滚来构建函数,不管它是否成功。它看起来像这样:

CREATE FUNCTION is_droppable RETURN BOOLEAN AS
    PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
    EXECUTE IMMEDIATE 'DROP TABLE tablename';
    ROLLBACK;
    RETURN TRUE;
EXCEPTION
    WHEN OTHERS THEN
        RETURN FALSE;
END;

这个函数总是删除我的表。
事实上,Oracle注意到DROP在他们的文档中的几个地方是不可ROLLBACKable的。
但我仍然希望能够确定我的表是否可以从我的代码中删除。
P.S.我认为当且仅当其他表不链接到它时,表是可删除的。也许这是解决我的问题的一个可能的方法,但我在这里避免它。我想找一个更简单的方法。

vngu2lb8

vngu2lb81#

您可以删除表级联约束,因此该表将与引用它的所有约束一起删除。或者,要查看引用表的外键:

select cfk.*
from all_constraints cp
join all_constraints cfk on cfk.r_constraint_name=cp.constraint_name 
  and cfk.r_owner=cp.owner
where table_name=&table_name and constraint_type='P';

但是,一般来说,在存储过程中删除动态SQL中的表并不好。您是否想过这些表可能在其他存储过程中被引用,而这些存储过程将进行反编译?

相关问题