我正在开发一个有 50/60 个表的系统。每个都有相同的唯一键(MEMBID
在本例中调用它)
是否有一个我可以运行的查询将显示所有至少有一行MEMBID
存在的表的名称?
或者我是否需要在USER_TABLES
表格中游标,然后构建一个动态查询来构建一个“数组”?
非常感谢
麦克风
我会选择动态 SQL - 这很简单:
declare
l_cnt_membid number;
l_cnt_overall number;
begin
for cur in (select table_name from user_tab_cols where column_name = 'MEMBID')
loop
execute immediate 'select count(*), count(membid) from ' || cur.table_name
into l_cnt_overall, l_cnt_membid;
dbms_output.put_line(cur.table_name || ', overall: ' || l_cnt_overall ||
', membid: ' || l_cnt_membid);
end loop;
end;
编辑:
如果您的表统计信息是最新的,您可以直接从 user_tab_cols 获取此信息:
select table_name,
(case when num_distinct > 0
then 'YES'
else 'NO' end) has_nonnull_membid
from user_tab_cols
where column_name = 'MEMBID'