sql - 检查哪些 View 有行

标签 sql database oracle view

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

最佳答案

你可以使用:

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;

编辑:

如果我们只想检查 View 是否有行,我们可以将 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;

关于sql - 检查哪些 View 有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51879509/

相关文章:

SQL Server - 组行

java - Android:如何使用 Android Java 代码连接 oracle 数据库?

mysql - 按照 MySQL 中的条件顺序左连接到单行

c# - Entity Framework 6 代码优先触发器

mysql - SQL Server 是否有等同于 MySql 的 sql_no_cache 修饰符?

database - 如何同步 postgresql 模式的表 - Sequelize ORM

PHP - 如何在准备好的语句中将数组替换为主机参数

mysql - 将托管服务器上的网站连接到我的本地主机 php mysql

oracle - 在 Oracle PL/SQL 中处理 NULL

java - 如何在 spring DriverManagerDataSource 上设置超时