2014-01-09 57 views
0

如何從Oracle視圖創建鏈接表?我可以通過代碼從Oracle表創建鏈接見下表H2:如何從Oracle視圖創建鏈接表?

--TEST is a table in Oracle 
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM TEST)'); 

但是當我改變表TEST爲下面查看VIEW_TEST

--VIEW_TEST is an view in Oracle 
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM VIEW_TEST)'); 

異常會拋出:ORA-00942:表或視圖不不存在

那麼如何從Oracle視圖創建鏈接表?

更新:

如果我更改爲物化視圖來看,它也是工作。

--MV_TEST is a materialized view in Oracle 
CREATE LINKED TABLE LINK('', 'jdbc:oracle:thin:@url:1521:se', 'sa', 'sa', '(SELECT * FROM MV_TEST)'); 
+0

錯誤是非常直的前進。這意味着或者視圖不存在或者用戶'sa'沒有授予(權限)。嘗試向用戶sa添加此視圖的授權,並讓我們知道 –

+0

實際上,這不是特權問題。如果視圖是物化視圖,我覺得也可以。請參閱更新。 – Garnett

回答

1

那麼,關於鏈接表的H2文檔關於視圖不夠清楚。我的猜測是,它與物化視圖一起工作,只能用於物理對象。一個關於oracle的視圖不是一個物理對象,它是一個鏈接資源到數據庫的查詢。

由於文檔狀態的情況下,這LINKED TABLE將無法​​正常工作

以下是不支持,因爲它們可能會導致死鎖:創建一個鏈接表到同一個數據庫,並創建一個鏈接表到另一個數據庫使用服務器模式(如果另一個數據庫在同一服務器中打開)(使用嵌入模式)。

鏈接表也不支持H2中不支持的數據類型,例如無符號數據類型(如果值超出簽名類型的範圍)。在這種情況下,需要將列轉換爲受支持的類型。

因此,是否接受意見還不清楚。

你能做的最好的是試試FORCE命令作爲documentation states,它會創建鏈接的表,即使表不存在。所以它會是這樣的:

CREATE FORCE LINKED 
    TABLE LINK ('', 
       'jdbc:oracle:thin:@url:1521:se', 
       'sa', 
       'sa', 
       '(SELECT * FROM VIEW_TEST)'); 
+0

@a_horse_with_no_name感謝您的更正:) –

+0

是的,我們需要將視圖放入圓括號中,就像''(VIEW_TEST)'一樣,它會起作用。感謝您的回答。 – Garnett