2014-05-07 34 views
0

如何在沒有dblink的情況下將數據從一個表插入或更新到另一個表(相同結構)的最佳方式是什麼?在沒有dblink的情況下在不同數據庫中的表之間複製數據(合併)

這裏是我如何與一個DBLINK做到這一點:

MERGE INTO TABLE_1 loc 
USING (
    SELECT ID, CODE, NAME 
    FROM [email protected]_link) rem 
ON (loc.ID = rem.ID) 
WHEN MATCHED THEN 
    UPDATE SET loc.CODE = rem.CODE, loc.NAME=rem.NAME 
WHEN NOT MATCHED THEN 
    INSERT (loc.ID, loc.CODE, loc.NAME) 
    VALUES (rem.ID, rem.CODE, rem.NAME); 

回答

0

一個DB鏈接表明,2個模式是2級不同的數據庫。這意味着有2個數據存儲

之間沒有直接聯繫,在這種情況下,下面是你的選擇(據我所知):

選項1:創建數據庫鏈接和使用的代名詞是同樣在ur的同義詞sql。這樣,當你更新數據庫鏈接..只需要更新同義詞,而不是SQL本身..

選項2:創建一個階段模式,其中數據將通過Web服務或數據從源數據庫推送上傳(平面文件)或其他方式。然後使用相同的SQL,但引用舞臺架構的同義詞

除此之外,我不認爲有選項。

Forum

+0

正如你在鏈接中提出的,我使用Java獲取數據,然後從一個表中插入數據,然後插入到另一個表中,但性能並不是最好的,但它起作用。謝謝 –

+0

:)...我很高興我能幫上忙 –

1

你可以生成一個數據庫的每條記錄合併報表,節省製作腳本並在另一個數據庫運行它。請注意空值

SELECT ' 
    merge into table_1 loc 
    using (select ' || nvl(to_char(id), 'null') || ' id, ' || '''' || code || '''' || ' code, ''' || name || ''' name from dual) rem ' || 
'ON (loc.ID = rem.ID) 
    WHEN MATCHED THEN 
     UPDATE SET loc.CODE = rem.CODE, loc.NAME=rem.NAME 
    WHEN NOT MATCHED THEN 
     INSERT (loc.ID, loc.CODE, loc.NAME) VALUES (rem.ID, rem.CODE, rem.NAME);' stmt 
FROM TABLE_1 
0

您可以嘗試出口的記錄,然後在目標數據庫端只需要創建一個外部表引用此文件。

相關問題