检查哪些视图有行

And*_*eca 1 sql database oracle view

我有一个包含 300 多个视图的数据库,其中大多数视图都是空的。我需要知道哪些视图有行。是否有查询来检查哪些视图有行?

Luk*_*zda 5

你可以使用:

SELECT owner, view_name, cnt              
FROM all_views, XMLTABLE('/ROWSET/ROW' passing (
             dbms_xmlgen.getxmltype(REPLACE(REPLACE(
         'select COUNT(*) AS cnt from "<owner>"."<table_name>"', '<owner>', owner)
             , '<table_name>', view_name))) COLUMNS cnt INT)
WHERE cnt > 0;
Run Code Online (Sandbox Code Playgroud)

编辑:

如果我们只想检查视图是否有行,我们可以COUNTEXISTS. 这也应该会提高性能。

SELECT owner, view_name, has_rows            
FROM all_views, XMLTABLE('/ROWSET/ROW' passing (
             dbms_xmlgen.getxmltype(REPLACE(REPLACE(
              'select CASE WHEN EXISTS(SELECT 1 from "<owner>"."<table_name>") 
              THEN 1 ELSE 0 END AS has_rows FROM dual', '<owner>', owner)
             , '<table_name>', view_name))) COLUMNS has_rows INT)
WHERE has_rows > 0;
Run Code Online (Sandbox Code Playgroud)