这是一个硬汉。您不能select count(*) from view_X
使用直接 SQL 加入或类似的东西,所以我能想到的最好的事情是一个接受视图名称并返回其计数的函数:
CREATE OR REPLACE FUNCTION ViewRowCount(viewName VARCHAR2) RETURN NUMBER
AS
rowCount NUMBER := 0;
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || viewName INTO rowCount;
RETURN rowCount;
END;
/
函数到位后,您可以从查询中调用它:
SELECT DISTINCT OWNER,
OBJECT_NAME,
ViewRowCount(OBJECT_NAME)
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'VIEW'
AND OWNER = 'ADMIN';
顺便说一句,我认为您不需要DISTINCT
此查询,但我今天没有 DBA 访问权限,所以我不能确定。记录计数将足够慢,因此如果在过滤之前存在重复项,DISTINCT
则每个重复行都会计数,从而使其更慢。
还可以看看 Rachcha 的解决方案,它不需要像我的那样创建一个新对象(函数)。如果您要从前端调用,则需要使用类似我的答案的方法,但如果您要从 SQL*Plus 调用,Rachcha's 会很好地工作。