這段SQL能否能優化,實在太慢了
UPDATE HG_JHPC t
SET (WGSJ) = (select sum(t_qty)
from (SELECT MSI.SEGMENT1 ITEM,
to_char(MT.TRANSACTION_DATE, 'yyyy-mm-dd') T_date,
MT.TRANSACTION_QUANTITY T_QTY
FROM INV.MTL_MATERIAL_TRANSACTIONS MT,
INV.MTL_SYSTEM_ITEMS_B MSI
WHERE MT.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
and MT.TRANSACTION_DATE >= sysdate - 31
and msi.segment1 not like 'FA%'
and mt.transaction_type_id in (17, 44)
AND MT.SUBINVENTORY_CODE = 'F010'
UNION ALL
select MSI.SEGMENT1 ITEM,
TO_CHAR(T.TRANSACTION_DATE, 'YYYY-MM-DD') T_date,
T.TRANSACTION_QUANTITY T_QTY
from inv.mtl_material_transactions t,
INV.MTL_SYSTEM_ITEMS_B MSI
WHERE T.INVENTORY_ITEM_ID(+) =
MSI.INVENTORY_ITEM_ID
and T.TRANSACTION_DATE >= sysdate - 31
and msi.segment1 not like 'FA%'
AND T.TRANSFER_SUBINVENTORY IN ('R010', 'R041')
AND T.TRANSACTION_TYPE_ID = 2
AND T.SUBINVENTORY_CODE = 'F010')
WHERE substr(ITEM, 3, 6) = substr(t.ITEM, 3, 6)
and T_DATE >= '2011-11-01'
AND T_DATE <= '2011-11-05'
and TO_CHAR(t.PC_DATE, 'YYYY-MM-DD') = '2011-11-06' --TO_CHAR(SYSDATE+1,'YYYY-MM-DD')
and SUBSTR(t.ZB_CLASS, 1, 2) = 'HX'
group by substr(item, 3, 6))
where exists
(select sum(t_qty)
from (SELECT MSI.SEGMENT1 ITEM,
to_char(MT.TRANSACTION_DATE, 'yyyy-mm-dd') T_date,
MT.TRANSACTION_QUANTITY T_QTY
FROM INV.MTL_MATERIAL_TRANSACTIONS MT,
INV.MTL_SYSTEM_ITEMS_B MSI
WHERE MT.INVENTORY_ITEM_ID = MSI.INVENTORY_ITEM_ID
and MT.TRANSACTION_DATE >= sysdate - 31
and msi.segment1 not like 'FA%'
and mt.transaction_type_id in (17, 44)
AND MT.SUBINVENTORY_CODE = 'F010'
UNION ALL
select MSI.SEGMENT1 ITEM,
TO_CHAR(T.TRANSACTION_DATE, 'YYYY-MM-DD') T_date,
T.TRANSACTION_QUANTITY T_QTY
from inv.mtl_material_transactions t,
INV.MTL_SYSTEM_ITEMS_B MSI
WHERE T.INVENTORY_ITEM_ID(+) = MSI.INVENTORY_ITEM_ID
and T.TRANSACTION_DATE >= sysdate - 31
and msi.segment1 not like 'FA%'
AND T.TRANSFER_SUBINVENTORY IN ('R010', 'R041')
AND T.TRANSACTION_TYPE_ID = 2
AND T.SUBINVENTORY_CODE = 'F010')
WHERE substr(ITEM, 3, 6) = substr(t.ITEM, 3, 6)
and T_DATE >= '2011-11-01'
AND T_DATE <= '2011-11-05'
and TO_CHAR(t.PC_DATE, 'YYYY-MM-DD') = '2011-11-06'--TO_CHAR(SYSDATE+1,'YYYY-MM-DD')
and SUBSTR(t.ZB_CLASS, 1, 2) = 'HX'
group by substr(item, 3, 6));