2017-07-24 140 views
0

我有一個excel中的視圖列表。我必須檢查它們是否存在於數據庫中。有沒有什麼方法可以編寫查詢來完成這件事。結合多個select語句輸出

現在我在查詢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  | 
|  .  |  .  | 
|  .  |  .  | 
+-------------+--------------+ 

回答

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; 
0

您可以對此使用IN語句。我通常使用Excel公式來構建IN語句,例如:

="'" & A1 & "', " 

其中A1是視圖名稱,如果您的Excel文件。

這樣很容易使查詢:

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 
0

把你的意見列表,創建一個平面文件和外部表定義的文件,然後運行下面的查詢;

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 

這樣做的好處是,你可以,只要你喜歡,並以新的清單隻涉及替換該文件的運行有一個列表。

我想這實際上取決於你將檢查的人名視圖名稱。