MTL_SERIAL_NUMBER table has 3 mark_id fields: GROUP_MARK_ID, LINE_MARK_ID, LOT_LINE_MARK_ID
GROUP_MARK_ID=TRANSACTION_HEADER_ID
LINE_MARK_ID=TRANSACTION_TEMP_ID
If lot controlled, then
LOT_LINE_MARK_ID = LOT_TEMP_TRNASACTION_ID
Else
LOT_LINE_MARK_ID=LINE_MARK_ID
These mark_id fields are used to ensure that that serial numbers used by one user's session do not become available incorrectly to another user.
Note 309710.1 - Cannot Transact Serial Number with Mark ID Populated/Orphan Serial Numbers
The following SQL identified the invalid / incorrect data:
This query can show the columns (MARK_ID's) were populated for the serialnumber and that the status of the serial number was one of the following:
select count(*) from
mtl_serial_numbers msn
where (msn.group_mark_id is not null and msn.group_mark_id <> -1)
and not exists (select 1 from mtl_serial_numbers_temp msnt
where msn.group_mark_id = msnt.transaction_temp_id
or msn.group_mark_id = msnt.group_header_id)
and not exists (select 1 from wsh_delivery_details wdd
where wdd.inv_interfaced_flag <> 'Y'
and wdd.released_status in ('Y','C')
and wdd.transaction_temp_id is not null
and msn.group_mark_id = wdd.transaction_temp_id)
and not exists (select 1 from wsh_delivery_details wdd
where wdd.inv_interfaced_flag <> 'Y'
and wdd.released_status in ('Y','C')
and msn.inventory_item_id = wdd.inventory_item_id
and msn.serial_number = wdd.serial_number)
and not exists (select 1 from mtl_cycle_count_entries mcce
where mcce.cycle_count_header_id = msn.group_mark_id
and mcce.cycle_count_entry_id = msn.line_mark_id
and mcce.entry_status_code in (1,2))
/