1

我正在开发一个有 50/60 个表的系统。每个都有相同的唯一键(MEMBID在本例中调用它)

是否有一个我可以运行的查询将显示所有至少有一行MEMBID存在的表的名称?

或者我是否需要在USER_TABLES表格中游标,然后构建一个动态查询来构建一个“数组”?

非常感谢

麦克风

4

1 回答 1

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'
于 2013-10-24T11:09:28.780 回答