我有一个Oracle SQL语句,它可以获取多个表中出现的某个列的所有表。
select owner, table_name from all_tab_columns
where column_name = 'DOCUMENT_ID'
order by table_name;
现在,我想添加删除功能,该功能将删除DOCUMENT_ID = 1的所有表中的所有记录
我不想一次做一张table,因为有很多,接近30张。
更新:在我的评论中,如果有一个FOREIGN KEY ID -例如,我要删除的记录有一个子记录,该怎么办
让我们以循环记录为例,如下面的伟大解决方案所示。
假设DOCTYPE_ID出现在document_id= 1的记录中。DOCTYPE_ID= 123。因此,我需要搜索所有其他表或DOCTYPE_ID= 123的表,并删除所有这些行。
数据库中只有31个表,这是永远不会改变的
1条答案
按热度按时间yebdmbv41#
使用
EXECUTE IMMEDIATE
生成所需的动态DML:请记住,您显然需要对所有这些表都具有删除权限才能使其工作。我还建议在
OWNER
上构建某种过滤器,以防止访问您不希望访问的表。更新:
您的问题已更新,以反映遵循外键关系从子表中删除行的需要。如果这就是问题所在,您不需要编写任何特殊代码。只需使用
ON DELETE CASCADE
选项定义您的外键,如果父项被删除,则以这种方式定义外键的子项将被自动删除。这不是你应该自己编写代码的东西。