2016-09-06 53 views
0

我使用IntelliJ創建我的應用程序和Oracle數據庫。可以,以及如何使用IntelliJ數據庫工具查詢幾個數據庫模式?

目前,我必須將數據從舊數據庫SCHEMA遷移到較新的數據庫。表和列已更改,我想創建一個IQBase腳本,該腳本將在安裝新的應用程序版本時在不同的服務器上運行。

所以我有,老SCHEMA數據(我們將談論OLD_SCHEMA),我想SELECT這些數據,變換他們和INSERT INTONEW_SCHEMA。所以,我想要做的是這樣的:

INSERT INTO NEW_SCHEMA.TABLE_X (........) SET (SELECT ..... FROM OLD_SCHEMA.TABLE_Y) 

,但是當我試圖用的IntelliJ捆綁在一起的數據庫工具執行這種查詢,我得到了一個錯誤解釋,有一個不存在的表或視圖。

[2016-09-06 15:22:29] [42000][942] ORA-00942: Table ou vue inexistante 

這似乎很正常,因爲當我創建SQL控制檯文件來測試我的查詢時,它鏈接到兩個模式之一。

那麼,我可以,如果我可以,如何執行我的查詢使用這兩個模式的數據?

謝謝。

PS:導入,導出不是解決方案,結構改變很多。

回答

1

除非您有權這樣做,否則您無法在另一個模式中查詢表。如果連接到new_schema並且想要查詢old_schema.table_y,則需要在old_schema.table_y上選擇特權。

爲了這樣做,請連接到old_schema並授予這些權限。現在

grant select on table_y to new_schema; 

查詢應該工作(不SET語句)。

查看此鏈接的語法示例。 Oracle insert from select into table with more columns

+0

非常感謝你,它的工作原理就像一個魅力! – jdelagorce

2

要處理兩個模式,您的用戶必須在兩個模式中授予(在SELECT,INSERT等)。

而且你用錯了sintax的INSERT語句,你需要使用sintax這樣

INSERT INTO NEW_SCHEMA.TABLE_X (........) SELECT ..... FROM OLD_SCHEMA.TABLE_Y 
+0

謝謝,我只是在尋找好的語法:) – jdelagorce

+0

實際上,它似乎比預計的要難一些:我想在舊錶中插入舊數據,但不是完全。表格示例我想通過序列生成動態標識,在舊錶中獲取一個或兩個舊數據並添加新數據....您有想法嗎? – jdelagorce

+0

您可以在SELECT語句中使用序列,例如 'SELECT NEW_SHEMA.my_sequence.nextval,column1,column2,... FROM OLD_SCHEMA.TABLE_Y' – AlexSmet

相關問題