gpt4 book ai didi

oracle - 查询以查找所有空表

转载 作者:行者123 更新时间:2023-12-04 08:04:38 27 4
gpt4 key购买 nike

考虑到我有一个名为 SBST 的架构

我想在这个 SBST 架构中找到所有空表列表。是否有任何 PL/SQL 程序可以找到它。我发现很少。但是那些正在使用我无法指定架构名称 SBST 的用户表。

我正在使用这个

select table_name from dba_tables where owner ='SBST'
having count(*)=0 group by table_name

上面的查询有什么问题?

最佳答案

类似于@shareef 的回答,但使用 dynamic SQL以避免必须创建临时 .sql文件。你需要 dbms_output 可见,例如与 set serveroutput on 在 SQL*Plus 中 - 不了解 Toad。

declare
cursor c(p_schema varchar2) is
select 'select ''' || table_name || ''' from ' ||
p_schema ||'.' || table_name || ' where rownum < 2 ' ||
' having count(*) = 0' as query
from all_tables
where owner = p_schema
order by table_name;
l_table all_tables.table_name%TYPE;
begin
for r in c('SBST') loop
begin
execute immediate r.query into l_table;
exception
when no_data_found then continue;
end;

dbms_output.put_line(l_table);
end loop;
end;
/

使用 all_tables似乎比 dba_tables 有用在这里,您知道您可以从它列出的表格中进行选择。我还在 from 中包含了模式子句,以防其他用户有同名的表,因此如果您以不同的用户身份连接,您仍然可以看到它 - 也可能避免同义词问题。

具体来说,您的查询有什么问题...您有 havinggroup by错误的条款;但无论如何它总是不会返回任何数据,因为如果 SBST 有任何表,那么 count (*) from dba_tables必须非零,所以 having总是匹配;如果没有,那么,无论如何都没有数据,所以 having 什么也没有。来匹配。您正在计算有多少个表,而不是每个表中有多少行。

关于oracle - 查询以查找所有空表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134992/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com