我正在开发一个有50/60个表的系统。每个都有相同的唯一键(在此示例中称为MEMBID
)
我可以运行一个查询,它会显示至少有一行存在MEMBID
的所有表的名称吗?
或者我是否需要浏览USER_TABLES
表,然后构建动态查询以构建“数组”?
非常感谢
麦克
答案 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'