Pl SQL计算100个视图中没有联合的行

时间:2016-11-23 07:22:21

标签: sql oracle plsql

我正在尝试计算每个视图在oracle数据库中的行数。

观看次数超过100次。

我希望它显示视图名称和行数。

我试过

SELECT VIEW_NAME, COUNT(*) FROM ALL_VIEWS 

但这不起作用。

我使用view_name and max(rownum)的分组尝试了类似的查询,但这也没有用。

SQL I写作正在生成view_names or max(rownum)分配给view_names的计数。我需要每个人view_name的行数。

有一种简单的方法吗?

谢谢,

罗布

1 个答案:

答案 0 :(得分:5)

说你有意见:

create or replace view viewTwoRows as select level as l from dual connect by level <= 2;
create or replace view viewTenRows as select level as l from dual connect by level <= 10;

您可以使用以下命令在单个语句中查询每个视图:

select view_name,
       to_number(extractvalue( xmltype(dbms_xmlgen.getxml('select count(*) c from '||VIEW_NAME)) ,'/ROWSET/ROW/C')) 
from all_views;

VIEW_NAME                             NUM
------------------------------ ----------
VIEWTENROWS                            10
VIEWTWOROWS                             2

以不同的方式,您可以遍历视图并查询它们;例如:

declare
    c number;
begin
    for i in (
                select view_name, 'select count(*) as c from ' || view_name as statement
                from all_views
             ) loop
        execute immediate i.statement into c;
        dbms_output.put_line('View ' || i.view_name || ': ' || c);
    end loop;
end;