在没有dblink(Oracle)的情况下从不同数据库复制表之间的数据(合并)

时间:2014-05-07 08:27:44

标签: oracle

在没有dblink的情况下,将数据从一个表插入或更新到另一个表(相同结构)的最佳方法是什么。

以下是我使用dblink的方法:

MERGE INTO TABLE_1 loc
USING (
  SELECT ID, CODE, NAME
  FROM TABLE_1@db_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);

3 个答案:

答案 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

答案 1 :(得分:0)

数据库链接表明2个模式位于2个不同的数据库中。这意味着2个数据存储之间没有直接链接

在这种情况下,以下是您的选择(我知道):

选项1:为数据库链接创建一个同义词,并在ur sql中使用该同义词。那样,当你更新db link..u只需要更新同义词而不是sql本身..

选项2:创建一个阶段架构,通过Web服务或数据上传(平面文件)或其他方式从源数据库推送数据。然后使用相同的sql但引用阶段架构的同义词

除此之外我不认为有选择。

Forum

答案 2 :(得分:0)

您可以尝试导出记录,然后在目标数据库端创建一个引用此文件的外部表。

相关问题