2016-11-09 60 views

回答

0

您需要在其中一個環境中創建數據庫鏈接。假設您將在DEV上爲PROD創建數據庫鏈接,並授予其選擇權,以避免任何破壞性數據。

CREATE PUBLIC DATABASE LINK PROD 
CONNECT TO <user_name> 
IDENTIFIED BY <password> 
USING '<service_name>'; 

然後讓你需要做的一切分歧:

SELECT * FROM [email protected] 
MINUS 
SELECT * FROM TABLE1 

和oposite查詢:

SELECT * FROM TABLE1 
MINUS 
SELECT * FROM [email protected] 
+0

謝謝Kacper :)完美答案.. –

2

如果兩個表具有相同的列來比較它們的最佳方式,而無需昂貴的減號操作或連接(只有讀取每個表一次)是這樣的:

select max(flag), col1, col2, ... 
from (
     select 'prod' as flag, col1, col2, ... from table1_prod 
     union all 
     select 'dev' as flag, col1, col2, ... from table1_dev 
    ) 
group by col1, col2, ... 
having count(*) = 1 

在GROUP BY,如果該行在兩個表中是相同的,它將具有計數2,因此不會被選擇。如果該行僅在產品中或僅在dev中,則計數爲1。一個「更改」行將在兩個列中,但至少一列中具有不同的值,所以它確實是兩個不同的組。 「更改」行只有在表格中有可以匹配它們的唯一鍵時纔有意義;您可以通過比較唯一密鑰中的值來識別「已更改」行。

+0

什麼@用於連接到不同的數據庫。 –