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 */
*/