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).
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.
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.
Related Tools
Oracle EBS Item Attribute Template Worksheet
Plan item master attribute values for a new item template, with the underlying MTL_SYSTEM_ITEMS_B column for each attribute.
OracleOracle EBS Inventory Tables Reference
Searchable lookup of the core Oracle EBS Inventory and Cost Management tables with purpose and key columns, for report writers and technical consultants.
Developer ToolsOracle EBS FND_REQUEST.SUBMIT_REQUEST Code Generator
Fill in user, responsibility, program and arguments and get a PL/SQL block that submits a concurrent request from the database, optionally adds an XML Publisher layout and waits for completion.
Developer ToolsOracle EBS Concurrent Program Parameters and Responsibility SQL Generator
Three SQL queries for any concurrent program: definition and executable, parameters in order with value sets and defaults, and the request groups and responsibilities that can submit it.
More Developer Tools tools
See all- Oracle EBS Onhand Quantity SQL Generator
- Oracle EBS BOM Explosion SQL Generator
- Oracle EBS Pending Transactions SQL Generator for Period Close
- Oracle EBS Public PL/SQL API Reference (OM, INV, PO, AP, AR, TCA, FND)
- Oracle EBS Forms Personalization Tables and Trigger Events Reference
- Oracle EBS Forms FRM Error Codes Reference (FRM-92101, FRM-40735)
- Oracle EBS XML Publisher RTF Template Syntax Reference
- Oracle EBS OE_ORDER_PUB.PROCESS_ORDER Script Generator
- Oracle EBS PL/SQL Concurrent Program Generator (Package plus FND_PROGRAM Registration)
Keep exploring
Free tools
- Oracle EBS SQL Query Generator for Items and WIP JobsBuild ready-to-run SELECT statements over MTL_SYSTEM_ITEMS_B, WIP_DISCRETE_JOBS and on-hand quantity tables.
- Oracle EBS Item Attribute Template WorksheetPlan item master attribute values for a new item template, with the underlying MTL_SYSTEM_ITEMS_B column for each attribute.
- Oracle EBS Open Interface Tables, Import Programs and Error Tables ReferenceEach EBS 12.1/12.2 open interface table mapped to the concurrent program that loads it, the status column to check and where the errors land.
ERP fixes and how-tos
- How to Create an Item in Oracle EBSCreate an inventory item in Oracle EBS: Master Items form, master organization, templates, attributes, organization assignment, categories and common errors.
- Data Conversion in Oracle EBS: Interface Tables, Open Interfaces and ReconciliationHow data conversion works in Oracle EBS: extract, stage, validate, load through interface tables and APIs, then reconcile. Practical steps and common failures.
- Fix Oracle EBS MTL_TRANSACTIONS_INTERFACE Rows Stuck With PROCESS_FLAG = 3Inventory rows stuck in MTL_TRANSACTIONS_INTERFACE with PROCESS_FLAG 3? Read ERROR_CODE and ERROR_EXPLANATION, fix the cause, and resubmit from the Pending Transactions form.
AI on your ERP
- AI for Oracle E-Business Suite, Without Leaving On-PremHosting Oracle EBS 12.2 on-prem or in a private cloud? Add a private LLM over concurrent programs, interface tables and AP/PO data without moving to Fusion.
- AI for Oracle EBS in Industrial Manufacturing: WIP, MRP, and BOM Questions Answered DirectlyAI for Oracle E-Business Suite in industrial manufacturing: WIP jobs, BOMs, MRP, inventory and purchasing answered in plain English, private and read-only.
Integrations
- How to automate email-to-transaction in Oracle E-Business SuiteTurn inbound POs, RFQs, invoices and supplier confirmations in shared mailboxes into Oracle EBS transactions through open interfaces, with review and audit.
- How to use ChatGPT with Oracle E-Business SuiteUsing ChatGPT with Oracle E-Business Suite: export vs live access, custom GPT actions over ISG REST, enterprise data controls and when to keep data on-prem.