是否可以在不执行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.我认为当且仅当其他表不链接到它时,表是可删除的。也许这是解决我的问题的一个可能的方法,但我在这里避免它。我想找一个更简单的方法。
1条答案
按热度按时间vngu2lb81#
您可以删除表级联约束,因此该表将与引用它的所有约束一起删除。或者,要查看引用表的外键:
但是,一般来说,在存储过程中删除动态SQL中的表并不好。您是否想过这些表可能在其他存储过程中被引用,而这些存储过程将进行反编译?