UPDATE "POSDA"@PCSRV1 SET TRANS_FLG = 'Y' ,"TRANS_NO" = 'T20090302000032'
   WHERE EXISTS 
   (SELECT 1 FROM POSDA_TMP WHERE POSDA.SHOP=POSDA_TMP.SHOP 
                              AND POSDA.MACH=POSDA_TMP.MACH 
                              AND POSDA."DATE"=POSDA_TMP.DATE_tmp 
                              AND POSDA.TRNO = POSDA_TMP.TRNO) and TRNO LIKE '00%'
/*数据比较少  */

UPDATE "POSDA"@PCSRV1 SET TRANS_FLG = 'Y' ,"TRANS_NO" = 'T20090302000032'
   WHERE EXISTS 
   (SELECT 1 FROM POSDA_TMP WHERE POSDA.SHOP=POSDA_TMP.SHOP 
                              AND POSDA.MACH=POSDA_TMP.MACH 
                              AND POSDA."DATE"=POSDA_TMP.DATE_tmp 
                              AND POSDA.TRNO = POSDA_TMP.TRNO) and TRNO LIKE '0%'
/*数据比较多  */
这2个update语句,第一个可以执行,第二个不可以执行.
把update换做delete 条件不变 结果也是一样的.
给我的感觉是因为第二种数据比较多,又是通过dblink(oracle-sqlserver通过getway)的,所以速度比较慢 是不是有什么地方设置了最大链接时间的呢?

解决方案 »

  1.   

    就是执行时候报错,错误显示:ORA-28500: connection from ORACLE to a non-Oracle system returned this message:
    [Transparent gateway for MSSQL][A00A] Execute query failed, datasource is 'testserver', SQL text is 'UPDATE "POSDA" A1 SET "TRANS_FLG" = 'Y' WHERE  EXISTS (SELECT 1 FROM  ORACLE:"POSDA_TMP" A2 WHERE A1."SHOP"=A2."SHOP" AND A1."MACH"=A2."MACH" AND A1."DATE"=A2."DATE_TMP" AND A1."TRNO"=A2."TRNO") AND (A1."TRNO" LIKE '0%' OR A1."TRNO"='12000' OR A1."TRNO"='11999')'
    ORA-02063: preceding 2 lines from PCSRV1
    回滚段不够大应该不可能,因为我不加任何where条件是可以执行的!
      

  2.   

    为何多出条件:OR A1."TRNO"='12000' OR A1."TRNO"='11999'
    来?
      

  3.   

    有可能是数据类型问题?最好你把完整的sql语句帖出来
      

  4.   

    这就是完整的sql啊?
    数据类型没有问题,不加where条件是可以执行的!