我想编写一个查询,该查询检索特定所有者下的每个表中的行。我不是很擅长编写查询,因此我无法在互联网上找到解决方案。我写的查询是:
SELECT TABLE_NAME, COUNT(*) FROM DBA_TABLES WHERE TABLE_NAME IN
(SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER='ABC');
我知道查询是完全错误的,但我刚刚给它知道我想要什么。我希望它有所帮助。我得到的错误是:
ORA-00937: not a single-group group function
请帮我写相同的确切查询。谢谢!
答案 0 :(得分:2)
提取每个表中的记录数
然后在查询 DBA_TABLES 时,您的方向完全错误。它将为您提供用户拥有的表的计数,但不会为您提供每个表中的行数。
有三种方式:
SELECT COUNT(*) FROM table_1; SELECT COUNT(*) FROM table_2; SELECT COUNT(*) FROM table_3; ... and so on...
使用优秀的文本编辑器,您可以快速完成。
SQL> SELECT table_name, num_rows FROM dba_tables WHERE owner='SCOTT'; TABLE_NAME NUM_ROWS ---------- ---------- CLASS 0 SALGRADE 5 BONUS 0 DEPT 4 EMP 14
答案 1 :(得分:0)
当您使用组功能(计数)时,您必须将所有列出现在SELECT而不是组功能的列放在GROUP BY部分
SELECT TABLE_NAME, COUNT(*)
FROM DBA_TABLES
WHERE OWNER='ABC'
GROUP BY TABLE_NAME;
但是这个查询不会给你带来任何有趣的回复。它不是行数。它是该模式中的表数。
答案 2 :(得分:0)
获取所有表的行数,可以使用一点XML魔术来完成:
select owner,
table_name,
to_number(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) c from "'||owner||'"."'||table_name||'"')),'/ROWSET/ROW/C')) as count
from dba_tables
where owner = 'ABC'
and iot_name is null;
这为每个表生成select count(*) from ..
,然后"运行"通过dbms_xmlgen
并解析生成的XML输出以获取实际数字。