Developer ToolsFree generatorPDF, Excel, Word exportOracle E-Business SuiteAll Oracle E-Business Suite tools

Oracle EBS Item Import Script Generator: MTL_SYSTEM_ITEMS_INTERFACE and INCOIN

This generator writes a complete Oracle E-Business Suite item load: inserts into MTL_SYSTEM_ITEMS_INTERFACE for the master and a child organization, the Import Items (INCOIN) submission, the error query against MTL_INTERFACE_ERRORS and a check of MTL_SYSTEM_ITEMS_B. It is written for EBS 12.1 and 12.2 Inventory.

Fill in

Delete the child insert if the item is only needed in the master.

Lookup ITEM_TYPE, for example P purchased item, FG finished good.

An Inventory responsibility with access to the master organization.

401 is Inventory (INV).

Generated code
Download:

Block 1: insert interface rows (master first, then child)

INSERT INTO mtl_system_items_interface
  (process_flag, set_process_id, transaction_type, organization_code,
   segment1, description, primary_uom_code, template_name, item_type,
   created_by, creation_date, last_updated_by, last_update_date)
VALUES
  (1, 90001, 'CREATE', 'V1',
   'XX-BRKT-1001', 'Mounting bracket, 6061-T6, anodised', 'Ea', 'Purchased Item', 'P',
   1318, SYSDATE, 1318, SYSDATE);

-- Child organization assignment: master-controlled attributes come from the master
INSERT INTO mtl_system_items_interface
  (process_flag, set_process_id, transaction_type, organization_code, segment1,
   created_by, creation_date, last_updated_by, last_update_date)
VALUES
  (1, 90001, 'CREATE', 'M1', 'XX-BRKT-1001',
   1318, SYSDATE, 1318, SYSDATE);

COMMIT;

Block 2: confirm INCOIN parameters, then submit Import Items

-- Parameter order of Import Items on YOUR instance
SELECT u.column_seq_num, u.end_user_column_name, u.form_left_prompt, u.default_value
FROM   fnd_descr_flex_col_usage_vl u
WHERE  u.application_id = 401
AND    u.descriptive_flexfield_name = '$SRS$.INCOIN'
AND    u.enabled_flag = 'Y'
ORDER  BY u.column_seq_num;

SET SERVEROUTPUT ON
DECLARE
  l_org_id NUMBER;
  l_req_id NUMBER;
BEGIN
  FND_GLOBAL.APPS_INITIALIZE(1318, 50583, 401);

  SELECT organization_id INTO l_org_id
  FROM   mtl_parameters
  WHERE  organization_code = 'V1';

  -- Argument order below is the common R12 layout: verify against the query above
  l_req_id := FND_REQUEST.SUBMIT_REQUEST(
                application => 'INV',
                program     => 'INCOIN',
                description => 'Item import set 90001',
                start_time  => NULL,
                sub_request => FALSE,
                argument1   => TO_CHAR(l_org_id),  -- Organization (verify)
                argument2   => '1',                -- All organizations: 1 Yes, 2 No (verify)
                argument3   => '1',                -- Validate items (verify)
                argument4   => '1',                -- Process items (verify)
                argument5   => '1',                -- Delete processed rows (verify)
                argument6   => '90001',       -- Process set (verify)
                argument7   => CASE 'CREATE' WHEN 'CREATE' THEN '1' ELSE '2' END,  -- 1 create, 2 update (verify)
                argument8   => '2');               -- Gather statistics: 1 Yes, 2 No (verify; remove if absent)

  IF l_req_id = 0 THEN
    DBMS_OUTPUT.PUT_LINE('Submit failed: ' || FND_MESSAGE.GET);
    ROLLBACK;
  ELSE
    COMMIT;
    DBMS_OUTPUT.PUT_LINE('Import Items request ' || l_req_id);
  END IF;
END;
/

Block 3: errors for this set

SELECT msii.transaction_id,
       msii.organization_code,
       msii.segment1,
       msii.process_flag,
       mie.column_name,
       mie.message_name,
       mie.error_message
FROM   mtl_system_items_interface msii
JOIN   mtl_interface_errors mie
       ON  mie.transaction_id = msii.transaction_id
       AND mie.table_name     = 'MTL_SYSTEM_ITEMS_INTERFACE'
WHERE  msii.set_process_id = 90001
AND    msii.process_flag   = 3
ORDER  BY msii.segment1, msii.organization_code;

Block 4: check the created item, and the API alternative

SELECT msi.inventory_item_id, msi.segment1, mp.organization_code,
       msi.description, msi.primary_uom_code, msi.item_type,
       msi.inventory_item_status_code, msi.creation_date
FROM   mtl_system_items_b msi
JOIN   mtl_parameters mp
       ON mp.organization_id = msi.organization_id
WHERE  msi.segment1 = 'XX-BRKT-1001'
ORDER  BY mp.organization_code;

-- Prefer an API for single items? List the EGO_ITEM_PUB.PROCESS_ITEM signature on your instance
-- before writing the call (it has several overloads):
SELECT overload, position, argument_name, data_type, in_out, defaulted
FROM   all_arguments
WHERE  owner = 'APPS'
AND    package_name = 'EGO_ITEM_PUB'
AND    object_name  = 'PROCESS_ITEM'
ORDER  BY overload, position;

Verify: the INCOIN parameter order with the $SRS$ query (it changed across releases), UOM code case (Ea vs EA) in MTL_UNITS_OF_MEASURE, the template name in MTL_ITEM_TEMPLATES, and that the responsibility can access the master organization. Rows left at process_flag 3 are not reprocessed until you fix and reset them to 1.

Get your item load plan reviewed

Send a sample of your item spreadsheet and template list; we check it against Item Import rules for your release before you load.

Optional. The tool and every export work without this. No spam.

Was this tool useful?

How to use it

Enter the master and child organization codes, item number, description, primary UOM code, item template name and item type, and pick CREATE or UPDATE. Choose a SET_PROCESS_ID that no other load is using so you can run, inspect and purge your batch alone. Run Block 1, then the parameter query in Block 2 to confirm the INCOIN argument order on your release, adjust if needed, and submit. When the request completes, run Block 3 for errors and Block 4 to see the item in each organization. For a mass load, generate the inserts from a spreadsheet with the same column list.

  • Master row must import before or with child rows
  • Use one SET_PROCESS_ID per batch
  • Run Import Items from a responsibility with access to the master organization

How Item Import processes rows

PROCESS_FLAG drives the interface: 1 pending, 2 assigned, 3 error, 4 validated, 7 processed. Import Items picks rows with process_flag 1 for the set, resolves organization_code to organization_id, applies the template (template_name or template_id), defaults the remaining attributes, validates and inserts into MTL_SYSTEM_ITEMS_B and the translation table. A child organization row creates the assignment; master-controlled attributes are copied from the master, so you only supply org-controlled ones. Errors are written to MTL_INTERFACE_ERRORS keyed by TRANSACTION_ID, with the failing column and message. With delete processed rows set, successful rows are removed from the interface after import.

Worked example and reading errors

With the defaults, XX-BRKT-1001 is created in V1 with the Purchased Item template and assigned to M1 in the same set 90001. A typical first-run error is an invalid UOM, because codes are case sensitive (Ea versus EA), or a template name that does not exist in MTL_ITEM_TEMPLATES. Block 3 shows the column name and message for every failed row. Fix the data, then either reset process_flag to 1 and clear the related MTL_INTERFACE_ERRORS rows, or delete and reinsert. Block 4 should then return one row per organization with the same INVENTORY_ITEM_ID.

Gotchas

UPDATE rows need the item to exist in that organization, and with templates the update can overwrite attributes you did not intend to change, so supply only what changes. Large loads benefit from splitting into several sets and gathering statistics on the interface before import. If your instance uses Product Information Management (EGO), check whether new item request or change management rules apply before bypassing them with the interface. For single items from an integration, EGO_ITEM_PUB.PROCESS_ITEM is the supported API; list its signature on your instance first.

Frequently Asked Questions

What is the item interface table in Oracle EBS?

MTL_SYSTEM_ITEMS_INTERFACE. You insert rows with process_flag 1, a set_process_id and transaction_type CREATE or UPDATE, then run Import Items (INCOIN). Errors go to MTL_INTERFACE_ERRORS, and the created items land in MTL_SYSTEM_ITEMS_B. Revisions use MTL_ITEM_REVISIONS_INTERFACE and categories MTL_ITEM_CATEGORIES_INTERFACE.

How do I mass create items in Oracle EBS?

Load MTL_SYSTEM_ITEMS_INTERFACE with one row per item per organization, master rows plus child assignments, under one set_process_id, and run Import Items for that set. Use an item template to default most attributes so each row only needs item number, description, UOM and template.

What do the process_flag values mean?

1 pending, 2 assigned, 3 error, 4 validated, 7 processed successfully. Rows stuck at 3 have entries in MTL_INTERFACE_ERRORS for the same transaction_id. Rows stuck at 2 or 4 usually mean the import request ended abnormally and the set should be investigated before resubmitting.

Where are item templates stored?

Templates are in MTL_ITEM_TEMPLATES (name and ID) with their attribute values in MTL_ITEM_TEMPL_ATTRIBUTES. In the interface you can pass template_name or template_id. Applying a template at import sets the enabled attributes it contains; attributes you supply on the row override the template.

If you want item requests checked against your EBS templates and staged into the interface for a planner to approve, on your own servers, we can set that up.

ArchRay builder
Design the on-prem AI stack for Oracle E-Business Suite: model, GPUs, RAG pipeline, guardrails
See memory, speed and cost as you swap parts, then export the diagram. Free, in your browser.
Open the builder

Keep exploring

Free tools

ERP fixes and how-tos

Runs with your ERP

AI on your ERP

Integrations

Software