UPDATE T_DWJBXX T_DWJBXX
SET T_DWJBXX.TBSDM=SBFV.TBSDM,T_DWJBXX.SBBM=SBFV.SBBM,T_DWJBXX.SSQ=SBFV.SSQ,T_DWJBXX.DWMC=SBFV.DWMC,
    T_DWJBXX.DWXZ=SBFV.DWXZ,T_DWJBXX.YB=SBFV.YB,T_DWJBXX.DWDZ=SBFV.DWDZ,T_DWJBXX.LXR=SBFV.LXR,
    T_DWJBXX.LXDH=SBFV.LXDH,T_DWJBXX.SWDJZH=SBFV.SWDJZH,T_DWJBXX.JGDM=SBFV.JGDM,T_DWJBXX.JFZT=SBFV.JFZT,
    T_DWJBXX.GRSF=SBFV.GRSF,T_DWJBXX.CBDWBM=SBFV.CBDWBM,T_DWJBXX.CBDWMC=SBFV.CBDWMC,T_DWJBXX.ZJLX=SBFV.ZJLX,
    T_DWJBXX.ZJHM=SBFV.ZJHM,T_DWJBXX.XJHM=SBFV.XJHM,T_DWJBXX.JFYH=SBFV.JFYH,T_DWJBXX.YHHH=SBFV.YHHH,
    T_DWJBXX.KHYH=SBFV.KHYH,T_DWJBXX.YHZH=SBFV.YHZH,T_DWJBXX.YHHM=SBFV.YHHM
FROM SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV WHERE T_DWJBXX.TBSDM=SBFV.TBSDM AND T_DWJBXX.SBBM=SBFV.SBBM;
INSERT INTO 
       T_DWJBXX(TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM)
SELECT 
       TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM
FROM 
       SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV WHERE T_DWJBXX.SBBM<>SBFV.SBMM AND T_DWJBXX.TBSDM<>SBFV.TBSDM执行通不过,UPDATE 出现命令末正确结束
            INSERT 出现无效的T_DWJBXX.SBBM

解决方案 »

  1.   

    update 
    set
    from这个格式不对吧,不能用from
      

  2.   

    楼上的能不能帮我写一下
    我oracle不熟
      

  3.   

    应该改成
    update T_DWJBXX T
    set (col1,col2,col3...coln)=
    (select col1,col2,col3...coln from tab1 where id=T.id)至于insert那里的问题
    你检查下这个字段SBBM
      

  4.   

    UPDATE T_DWJBXX T_DWJBXX
    SET (TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM)=
    (select TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM
    from SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV WHERE TBSDM=T_DWJBXX.TBSDM AND SBBM=T_DWJBXX.SBBM)
      

  5.   

    INSERT 的要怎么写,谢谢了
      

  6.   

    WHERE T_DWJBXX.SBBM<>SBFV.SBMM AND T_DWJBXX.TBSDM<>SBFV.TBSDM
    最后一行这里
    SBMM是不是写错了
      

  7.   

    没看清楚
    insert 那句你的语法也不对
    这么写
    INSERT INTO 
           T_DWJBXX(TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM)
    SELECT 
           TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM
    FROM 
           SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV
            WHERE not exists(select 1 from t_dwjbxx where SBBM=SBFV.SBMM or TBSDM=SBFV.TBSDM)
      

  8.   

    ...最后那行SBMM如果是你的笔误,自己改下
      

  9.   

    INSERT 的不对
    --100859 原数据库有记录数
    --101612 用了INSERT之后的更新记录数
    --148899 服务器的数据记录数
    只更新了753条记录?
      

  10.   

    大概是你的条件设得不对
    T_DWJBXX.TBSDM=SBFV.TBSDM AND T_DWJBXX.SBBM=SBFV.SBBM;
    满足这个条件的更新,不满足的都要insert 是吗?
    如果是这样
    你的insert 条件就不能设成T_DWJBXX.TBSDM<>SBFV.TBSDM AND T_DWJBXX.SBBM<>SBFV.SBBM;
    这么改INSERT INTO 
           T_DWJBXX(TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM)
    SELECT 
           TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM
    FROM 
           SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV
            WHERE  exists(select 1 from t_dwjbxx where SBBM<>SBFV.SBMM or TBSDM<>SBFV.TBSDM)
      

  11.   

    错了

    INSERT INTO 
           T_DWJBXX(TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM)
    SELECT 
           TBSDM,SBBM,SSQ,DWMC,DWXZ,YB,DWDZ,LXR,LXDH,SWDJZH,JGDM,LRRQ,JFZT,GRSF,CBDWBM,CBDWMC,ZJLX,ZJHM,XJHM,JFYH,YHHH,KHYH,YHZH,YHHM
    FROM 
           SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV
            WHERE not exists(select 1 from t_dwjbxx where SBBM=SBFV.SBBM and TBSDM=SBFV.TBSDM)
      

  12.   

    啊,不会吧,你用的是12楼的代码吗
    7楼的插入行数太少,可能是因为,你的条件要T_DWJBXX.SBBM<>SBFV.SBMM AND T_DWJBXX.TBSDM<>SBFV.TBSDM
    两个同时满足才插入
    我把not exists里的条件改了下,or 改成and
    只要不满足其一就插入
    没理由0行被插入
      

  13.   

    就用你添加700多条时的代码
    把not exists 后面括号的where 后or改成and 就好
      

  14.   

    奇怪了,你先前用or还插入700行来着,你是在那次插入后的基础上再进行insert的是吗?
      

  15.   

    用merge into 吧merge into T_DWJBXX T_DWJBXX 
        using SBF.V_DWJBXX_OTHER_PY@DBLink1 SBFV 
        on (T_DWJBXX.TBSDM=SBFV.TBSDM AND T_DWJBXX.SBBM=SBFV.SBBM) 
        when matched then 
        update 
        set    T_DWJBXX.TBSDM=SBFV.TBSDM,T_DWJBXX.SBBM=SBFV.SBBM,T_DWJBXX.SSQ=SBFV.SSQ,T_DWJBXX.DWMC=SBFV.DWMC,
        T_DWJBXX.DWXZ=SBFV.DWXZ,T_DWJBXX.YB=SBFV.YB,T_DWJBXX.DWDZ=SBFV.DWDZ,T_DWJBXX.LXR=SBFV.LXR,
        T_DWJBXX.LXDH=SBFV.LXDH,T_DWJBXX.SWDJZH=SBFV.SWDJZH,T_DWJBXX.JGDM=SBFV.JGDM,T_DWJBXX.JFZT=SBFV.JFZT,
        T_DWJBXX.GRSF=SBFV.GRSF,T_DWJBXX.CBDWBM=SBFV.CBDWBM,T_DWJBXX.CBDWMC=SBFV.CBDWMC,T_DWJBXX.ZJLX=SBFV.ZJLX,
        T_DWJBXX.ZJHM=SBFV.ZJHM,T_DWJBXX.XJHM=SBFV.XJHM,T_DWJBXX.JFYH=SBFV.JFYH,T_DWJBXX.YHHH=SBFV.YHHH,
        T_DWJBXX.KHYH=SBFV.KHYH,T_DWJBXX.YHZH=SBFV.YHZH,T_DWJBXX.YHHM=SBFV.YHHM    when not matched then  
        insert
        (T_DWJBXX.TBSDM,T_DWJBXX.SBBM,T_DWJBXX.SSQ,T_DWJBXX.DWMC,T_DWJBXX.DWXZ,T_DWJBXX.YB,T_DWJBXX.DWDZ,T_DWJBXX.LXR,T_DWJBXX.LXDH,T_DWJBXX.SWDJZH,T_DWJBXX.JGDM,T_DWJBXX.LRRQ,T_DWJBXX.JFZT,T_DWJBXX.GRSF,T_DWJBXX.CBDWBM,T_DWJBXX.CBDWMC,T_DWJBXX.ZJLX,T_DWJBXX.ZJHM,T_DWJBXX.XJHM,T_DWJBXX.JFYH,T_DWJBXX.YHHH,T_DWJBXX.KHYH,T_DWJBXX.YHZH,T_DWJBXX.YHHM)
        values
        (SBFV.TBSDM,SBFV.SBBM,SBFV.SSQ,SBFV.DWMC,SBFV.DWXZ,SBFV.YB,SBFV.DWDZ,SBFV.LXR,SBFV.LXDH,SBFV.SWDJZH,SBFV.JGDM,SBFV.LRRQ,SBFV.JFZT,SBFV.GRSF,SBFV.CBDWBM,SBFV.CBDWMC,SBFV.ZJLX,SBFV.ZJHM,SBFV.XJHM,SBFV.JFYH,SBFV.YHHH,SBFV.KHYH,SBFV.YHZH,SBFV.YHHM);
      

  16.   

    用merge,楼主的update语句在oracle会通不过,oracle里面的update一般是用子查询实现楼上的代码已经写的很好
      

  17.   

    十分感谢wildwave
    问题解决了
    你是热心的人