我有一个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 |
| . | . |
| . | . |
+-------------+--------------+
答案 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
这样做的好处是,只要您愿意,您就可以拥有一个列表并使用新列表运行只需更换文件。
我想这实际上取决于你将要检查的人名视图。