查找有数据的表格

时间:2013-10-24 10:25:38

标签: sql oracle

我正在开发一个有50/60个表的系统。每个都有相同的唯一键(在此示例中称为MEMBID

我可以运行一个查询,它会显示至少有一行存在MEMBID的所有表的名称吗?

或者我是否需要浏览USER_TABLES表,然后构建动态查询以构建“数组”?

非常感谢

麦克

1 个答案:

答案 0 :(得分:1)

我会选择动态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'