组合多个select语句输出

时间:2017-07-24 12:27:12

标签: sql oracle

我有一个excel中的视图列表。我必须检查它们是否存在于DB中。有没有办法编写查询来完成这项工作。

现在我正在查询ALL_VIEWS以了解视图是否存在。

select VIEW_NAME from ALL_VIEWS where VIEW_NAME = 'ABC_V_DEF';

我是否需要对我的所有视图执行上述语句或有查询? 我想结合select查询输出来完成这项工作。 输出可能看起来像......请建议......

+-----------------------------
|  `VIEW_NAME`|`View Present?|
+----------------------------+
|  ABC_V_DEF  |    Yes       |
|  ABC_V_XCV  |     No       |
|      .      |     .        |
|      .      |     .        |
+-------------+--------------+

3 个答案:

答案 0 :(得分:1)

您可以在excel中的视图列表中构建o内嵌视图中的选择查询,然后像这样运行它。

SELECT o.view_name,
       CASE
         WHEN EXISTS (SELECT 1
                      FROM   all_views a
                      WHERE  a.view_name = o.view_name) THEN 'Yes'
         ELSE 'No'
       END "View Present?"
FROM   (SELECT 'ABC_V_DEF' VIEW_NAME
        FROM   dual
        UNION ALL
        SELECT 'ABC_V_DEF2' VIEW_NAME
        FROM   dual
        UNION ALL
        SELECT 'ABC_V_DEF3' VIEW_NAME
        FROM   dual
        UNION ALL
        SELECT 'ABC_V_DEF4' VIEW_NAME
        FROM   dual) o;  

答案 1 :(得分:0)

您可以使用IN语句。我通常使用Excel公式来构建IN语句,例如:

="'" & A1 & "', "

如果您的Excel文件是A1,则视图名称。

这样可以很容易地进行查询:

select VIEW_NAME from ALL_VIEWS where VIEW_NAME IN ('ABC_V_DEF', 'NAME_2', 'NAME_3', 'ETC');

这将只从列表中返回数据库中的视图。

第二个选项是创建一个包含Excel文件中所有可能视图的临时表。然后你可以这样做:

SELECT T.VIEW_NAME, CASE WHEN AV.VIEW_NAME IS NULL THEN 'No' ELSE 'Yes' END "View Present?" FROM TEMP_TABLE T LEFT OUTER JOIN ALL_VIEWS AV ON T.VIEW_NAME = AV.VIEW_Name

答案 2 :(得分:0)

获取视图列表,为文件创建平面文件和EXTERNAL TABLE定义,然后运行以下查询;

SELECT evl.view_name,
       CASE WHEN av.view_name IS NULL THEN 'No' ELSE 'Yes' END AS "View Present?"
FROM   ext_table_views evl
       LEFT OUTER JOIN
       all_views av ON av.view_name = evl.view_name

这样做的好处是,只要您愿意,您就可以拥有一个列表并使用新列表运行只需更换文件。

我想这实际上取决于你将要检查的人名视图。