簡體   English   中英

帶有條件的 Oracle 中所有視圖的行數

[英]Count of rows from all views in Oracle with a condition

我正在嘗試從 oracle 模式中的視圖中獲取所有行的計數,並且我的代碼運行良好。 但是,當我嘗試添加諸如 where 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前后添加一個空格,並在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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM