Oracle批量更新數據

 UPDATE WAR_DAYINVS A SET (A.IQTY,A.IAMT,A.PDATE) =
                         (SELECT QTY,T_PRICE,TO_DATE(SYSDATE,'YYYYMMDD HH:MM:SS')
                           FROM
                                   (
                                    SELECT
                                          B.FACID,
                                          B.GRPID,
                                          B.SUPID,
                                          A.MATID,
                                          A.XYID,
                                          SUM(QTY) AS QTY,
                                          SUM(QTY*
                                         (CASE WHEN(PRICE<=0) THEN (SELECT APRICE FROM DAT_MATCOSTPRS WHERE MATID = A.MATID) ELSE PRICE END))
                                          AS T_PRICE
                                     FROM   WAR_MATIOD A
                                     JOIN  V_FTID B
                                     ON  A.MATRSID = B.MATRSID
                                     AND B.ORT = 0
                                     GROUP BY FACID,GRPID,SUPID,MATID,XYID
                                    )  B             
                            WHERE A.FACID = B.FACID
                              AND A.GRPID = B.GRPID
                              AND A.SUPID = B.SUPID
                              AND A.MATID = B.MATID
                              AND A.XYID = B.XYID
                              AND INVDAY = TO_DATE(DATE1)
                         );

 

-----兩種方式比較

UPDATE WAR_MATIOD A SET (A.DINVID,A.ISPASSED,A.PDATE)=
        (
             SELECT  B.DINVID,1,SYSDATE
             FROM    WAR_DAYINVS B
             WHERE    B.FACID = (SELECT FACID FROM WAR_MATIOM WHERE MATRSID = A.MATRSID)
               AND    B.GRPID = (SELECT GRPID FROM WAR_MATIOM WHERE MATRSID = A.MATRSID)
               AND    B.SUPID = (SELECT SUPID FROM WAR_MATIOM WHERE MATRSID = A.MATRSID)
               AND    A.MATID = B.MATID
               AND    A.XYID = B.XYID
               AND    B.INVDAY = TO_DATE(SYSDATE)
               AND    A.ISPASSED = 0
        );
       
       
       
UPDATE (SELECT A.DINVID ADINVID,B.DINVID BDINVID,A.ISPASSED AISPASSED,A.PDATE APDATE
        FROM WAR_MATIOD A,WAR_DAYINVS B
        WHERE  B.FACID = (SELECT FACID FROM WAR_MATIOM WHERE MATRSID = A.MATRSID)
               AND    B.GRPID = (SELECT GRPID FROM WAR_MATIOM WHERE MATRSID = A.MATRSID)
               AND    B.SUPID = (SELECT SUPID FROM WAR_MATIOM WHERE MATRSID = A.MATRSID)
               AND    A.MATID = B.MATID
               AND    A.XYID = B.XYID
               AND    B.INVDAY = TO_DATE(SYSDATE)
               AND    A.ISPASSED = 0)
SET ADINVID = BDINVID,AISPASSED = 1,APDATE = SYSDATE

 

/*

@ 2011/07/28

@  Jay

@ 更新時報ORA-01779錯誤。需要加入/*+ BYPASS_UJVC */

*/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章