具有条件的 Oracle 中所有视图的行数

Count of rows from all views in Oracle with a condition

我正在尝试从 oracle 架构中的视图中获取所有行的计数,我的代码工作正常。但是当我尝试添加一个条件时,比如 actv_ind = 'Y',我无法让它工作。关于如何修改代码以使其工作的任何建议?

SELECT view_name,
TO_NUMBER(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) cnt from '||owner||'.'||view_name||
'where'||view_name||'.'||'actv_ind= Y')),'/ROWSET/ROW/CNT')) as VIEW_CNT
FROM all_views
WHERE owner = 'ABC'  AND view_name not in ('LINK$')

我收到错误 ACTV_IND:标识符无效。

来自 DBMS_XMLGEN 的错误消息不是很有帮助,因此您需要非常小心 SQL 语句的语法。 where前后加一个space,Y两边加引号:

SELECT view_name,
TO_NUMBER(extractvalue(xmltype(dbms_xmlgen.getxml('select count(*) cnt from '||owner||'.'||view_name||
' where '||view_name||'.'||'actv_ind= ''Y''')),'/ROWSET/ROW/CNT')) as VIEW_CNT
FROM all_views
WHERE owner = 'ABC'  AND view_name not in ('LINK$');

查询仍然假定每个视图都包含列 ACTV_IND。如果不是这样,您可能希望查询基于 DBA_TAB_COLUMNS WHERE COLUMN_NAME = 'ACTV_IND'.

这是我用于测试的简单示例架构:

create user abc identified by abc;
create or replace view abc.view1 as select 1 id, 'Y' actv_ind from dual;
create or replace view abc.view2 as select 2 id, 'N' actv_ind from dual;