please help to tune a query to avoid the duplicates when joining a cursor
I have to take the transaction details from mtl_material_transactions for transactions like pick release, ship confirm, subinventory transfer, for that i have wriitten a cursor and using that cursor value when joining this with order tables, i am facing the issue of lot of duplicates here.
CURSOR c1 IS
SELECT mtt.transaction_type_name
,mmt.transaction_id
,mmt.transaction_type_id
,mmt.transaction_source_type_id
,mmt.transaction_action_id
,mmt.inventory_item_id
,mmt.subinventory_code
,mmt.transfer_subinventory
,mmt.move_order_line_id
,mmt.trx_source_line_id
,mmt.trx_source_delivery_id
,mmt.content_lpn_id
,mmt.transaction_quantity
,mmt.transaction_date
,mmt.attribute5
,mmt.attribute6
,mmt.organization_id
,mmt.creation_date
,mmt.transaction_source_id
FROM mtl_material_transactions mmt
,mtl_transaction_types mtt
WHERE mtt.transaction_type_name in ('Subinventory Transfer','Sales order issue','Account alias receipt','Sales Order Pick')
AND mmt.transaction_type_id = mtt.transaction_type_id
AND mmt.creation_date > sysdate-6
order by mmt.creation_date desc;
BEGIN
OPEN c1;
l_count:=0;
LOOP
l_transaction_type_name := NULL;
l_transaction_id := NULL;
l_inventory_item_id := NULL;
l_subinventory_code := NULL;
l_transfer_subinventory := NULL;
l_move_order_line_id := NULL;
l_trx_source_line_id := NULL;
l_trx_source_delivery_id := NULL;
l_transaction_quantity := NULL;
l_transaction_date := NULL;
l_attribute5 := NULL;
l_attribute6 := NULL;
l_organization_id := NULL;
l_transaction_type_id := NULL;
l_transaction_source_type_id := NULL;
l_transaction_action_id := NULL;
l_content_lpn_id := NULL;
l_creation_date := NULL;
l_transaction_source_id := NULL;
FETCH c1
INTO l_transaction_type_name
,l_transaction_id
,l_transaction_type_id
,l_transaction_source_type_id
,l_transaction_action_id
,l_inventory_item_id
,l_subinventory_code
,l_transfer_subinventory
,l_move_order_line_id
,l_trx_source_line_id
,l_trx_source_delivery_id
,l_content_lpn_id
,l_transaction_quantity
,l_transaction_date
,l_attribute5
,l_attribute6
,l_organization_id
,l_creation_date
,l_transaction_source_id;
-- loop
EXIT WHEN c1%NOTFOUND;
BEGIN
INSERT INTO mot_qui_outbound_tran_stg
(sequence_number
,header_id
,record_type
,shipment_number
,pack_slip_number
,vendor_number
,motorola_site_code
,motorola_pick_req_no
,motorola_pick_req_line_no
,buyer_part_number
,destination_code
,shipped_quantity
,shipped_date
,process_flag
,layout_purpose_code
,status_code
,org_id
,last_updated_by
,last_update_date
,last_update_login
,request_id
,created_by
,creation_date)
(SELECT bookedorder_seq.nextval
,oeh.header_id
,'SM6DTL'
,l_move_order_line_id
,l_move_order_line_id
,':'
,'AF'
,oeh.orig_sys_document_ref
,oel.orig_sys_line_ref
,oel.ordered_item
,wdd.subinventory
,l_transaction_quantity
,l_transaction_date
,'N'
,'T21'
,'DROPPED'
,'81'
,'1'
,SYSDATE
,'1'
,'1'
,'1'
,SYSDATE
FROM oe_order_headers_all oeh
,oe_order_lines_all oel
,wsh_delivery_details wdd
,mtl_transaction_types mtt
,mtl_sales_orders mso
WHERE NOT EXISTS (SELECT 1
FROM mot_qui_outbound_tran_stg mqo
WHERE mqo.status_code ='DROPPED'
AND oeh.org_id=mqo.org_id
AND oeh.header_id = mqo.header_id)
AND l_trx_source_line_id = oel.line_id
AND l_move_order_line_id = wdd.move_order_line_id
-- AND l_subinventory_code = wdd.subinventory
AND l_organization_id = wdd.organization_id
AND oeh.header_id = oel.header_id
AND wdd.source_header_id = oeh.header_id
AND wdd.source_line_id = oel.line_id
AND wdd.source_line_id = l_trx_source_line_id
AND mso.sales_order_id=l_transaction_source_id
AND oeh.order_number=mso.segment1
AND l_transaction_type_id = 52
AND l_transaction_source_type_id = 2
-- AND l_transaction_type_name = 'Sales Order Pick'
AND oeh.org_id =81
--AND l_move_order_line_id is not null
AND l_creation_date > sysdate -6
);
EXCEPTION
WHEN OTHERS THEN
END;
lEND LOOP;
close c1;