在没有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);
答案 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但引用阶段架构的同义词
除此之外我不认为有选择。
答案 2 :(得分:0)
您可以尝试导出记录,然后在目标数据库端创建一个引用此文件的外部表。