日期:2014-05-17  浏览次数:20726 次

请教个数据推送的问题
我想通过dblink连接远程数据库,然后把本地的数据用merge语句推送到远程库中

MERGE INTO test@ly_dblink A
using(SELECT ID, age, NAME FROM test) T
ON(T.id=A.id)
WHEN NOT MATCHED THEN 
INSERT
  (ID, age, NAME)
VALUES
  (T.id, T.age, T.name)
WHEN MATCHED THEN 
UPDATE 
   SET ID = T.id,
       age = T.age,
       NAME = T.NAME;

上面语句执行后会报ORA-38104,ORA-02063错误
ORA-38104:Columns referenced in the ON Clause cannot be updated:"A1"."ID"
ORA-02063:紧接着line(起自ly_dblink ) 。
dblink没有问题,把test@ly_dblink的别名去掉后,条件用test@ly_dblink.id=t.id,会报DATABASE LINK:ly_dblink.id不存在。

------解决方案--------------------
把倒数第三行去掉,错误提示就是告诉你,你是依据ID相等来更新的,id本身就不能被更新,也没必要更新啊