2012-10-01 60 views
3

我剛剛發現我正在運行的一個查詢不是來自實際表格,而是來自VIEW。什麼是SQLPlus命令查看VIEW語句?

我希望看到該視圖中的SQL查詢。如果我嘗試describe我得到一個對象不存在的錯誤。當我從視圖中選擇時,我得到一些數據。

+0

意見應該表現得完全一樣的表做,據我所知的人具有選擇權限應該能夠做一個描述。你確定你正在查詢相同的視圖/表嗎? – NullUserException

回答

2

如果你想看到用來創建視圖中可以使用的功能dbms_metadata.get_ddl,它返回一個CLOB實際的SQL:

select dbms_metadata.get_ddl ('VIEW' 
          , 'MY_VIEW' -- view name 
           ) 
    from dual 

有一些更多的選擇,如果你需要他們。

如果你只想describe它像往常一樣。如果不工作,你是在錯誤的模式或對象不存在:

DESC MY_VIEW 

如果在不正確的方案是,你可以使用:

select dbms_metadata.get_ddl ('VIEW' 
          , 'MY_VIEW', -- view name 
          , 'MY_SCHEMA' 
           ) 
    from dual 

DESC MY_SCHEMA.MY_VIEW 
+0

我獲得以下爲第三選項'錯誤遞減my_schema.my_view - (視圖名稱)''ORA-04043:對象my_schema.actforevent不exist' – Mowgli

+0

@Mogli,它可能不是你...你確定該視圖存在在那個模式中? – Ben

+0

是的,我可以看到該用戶數據庫的視圖,但我無法編輯或查看來自我用來編寫sql查詢的軟件的VIEW。 – Mowgli

5

要查看視圖的底層SQL,您需要查詢數據字典。嘗試

select view_name, text from user_views where view_name = 'MY_VIEW'; 

如果用戶不擁有的視圖,然後嘗試all_views;

+0

感謝偉大的選擇命令,但我無法找到,即使我從ALL_VIEWS選擇*並在VIEW_NAME ='name_of_my_view''我知道其實它是一種看法,因爲我使用其他軟件來編寫查詢,並將其顯示在視圖選項卡下,而不是在表或功能下,但我不能編輯視圖或查看視圖的代碼。 – Mowgli

+0

確保您將視圖名稱指定爲UPPER個案字符串。另外,你確定這是一個觀點嗎?這可能是一個物化的觀點。如果是這樣,則查詢'user_mviews'或'all_mviews'。 – Wolf

0

或者更好的是,點擊在的SQLDeveloper左連接窗格視圖。一旦視圖打開,點擊SQL選項卡查看底層的SQL。要找到哪個用戶/架構的觀點是在使用

select owner 
    from all_objects 
    where object_name='VIEW_NAME' and object_type='VIEW'; 
+0

它不返回任何行。我用視圖的名稱替換了VIEW。 – Mowgli

+0

用您的視圖名稱替換「VIEW_NAME」。不應該改變Object_type ='VIEW''。 – Annjawn

+0

我仍然得到同樣的味精。 – Mowgli