Phase 3 · Item Management · Oracle RMS Series

Oracle RMS Item Images & Extended Attributes

Oracle RMS is not just a transaction engine — it also holds the descriptive metadata that makes an item complete: images for digital channels and internal systems, physical dimensions for logistics and warehouse slotting, ticketing attributes for label printing, and the extension model that lets retailers add their own custom columns and tables without touching the core schema.

12 min read📅April 25, 2026✍️Priyanshu Pandey📚Oracle RMS Series

Item Images and Extended Attributes — Overview

The core ITEM_MASTER table and its satellite tables — ITEM_DESC, ITEM_SUPPLIER, ITEM_LOC — capture what an item is, where it comes from, and where it goes. But a complete item record in a modern retail environment also needs images for e-commerce and digital channels, physical dimension data for warehouse management and logistics, printing attributes for shelf labels and price tickets, and whatever additional retailer-specific attributes the business requires.

Oracle RMS provides dedicated tables for images and dimensions, a ticketing attribute structure for label printing, and a formally documented extension model for anything beyond that. Understanding all four layers is essential for developers building integrations that need a complete item data picture — particularly those feeding Product Information Management (PIM) systems, e-commerce platforms, or warehouse management systems.

🖼️
Oracle RMS stores image references, not image data

A critical design point: the ITEM_IMAGE table stores URLs or file paths that point to where images are hosted — it does not store binary image data inside the database. Oracle RMS is not an image repository. The actual image files live in a file system, a CDN, or a dedicated Digital Asset Management (DAM) system. RMS holds the reference that tells downstream systems where to find each image.

Item Images

The ITEM_IMAGE Table

ITEM_IMAGE stores image references for items. The composite primary key is ITEM + IMAGE_TYPE, allowing multiple images per item — each serving a different display purpose.

01ITEM_IMAGE
ITEM + IMAGE_TYPE composite PK
ColumnTypeDescription
ITEMPKFK
VARCHAR2(25)FK → ITEM_MASTER.ITEM. Always VARCHAR2 — never cast to NUMBER.
IMAGE_TYPEPK
VARCHAR2(6)Identifies the purpose of this image. Retailer-configured values — see IMAGE_TYPE section below.
IMAGE_ADDR
VARCHAR2(400)The URL or file path to the image. This is the reference that downstream systems consume. Not binary data.
IMAGE_DESC
VARCHAR2(120)Optional descriptive label for the image (e.g. 'Front view on white', 'Lifestyle shot').
IMAGE_INDATE
DATEDate the image was associated with the item. Audit field.
Image Types

IMAGE_TYPE — Multiple Images Per Item

The IMAGE_TYPE column controls what kind of image a given row represents. Values are retailer-configured but follow common conventions across Oracle Retail implementations. Each type corresponds to a different use case in the downstream systems that consume item images.

02Common IMAGE_TYPE Values
Retailer-configured — these are the standard conventions
ColumnTypeDescription
A
Primary / FrontThe main product image — front view on a clean or white background. This is the image used in most e-commerce product listings, internal reporting tools, and storefront displays.
B
Alternate / BackSecondary image — back view, alternate angle, or variant close-up. Used in multi-image product pages.
C
Swatch / DetailColour swatch or fabric/material close-up. Critical for fashion and homeware items where the customer needs to see texture or exact colour.
D
LifestyleContextual or in-use photography — the item being worn, used, or displayed in a real setting. Used for marketing and digital editorial.
E
Dimensional / TechnicalTechnical or dimensional drawing. Used in homeware, furniture, and electronics where precise measurements are displayed visually.
F
Barcode / LabelAn image of the product label or barcode. Used in some receiving workflows and compliance documentation.
💡
IMAGE_TYPE values are instance-specific — always look them up

The IMAGE_TYPE codes above are conventions, not hard-coded standards. In any given Oracle RMS implementation, the valid values and their meanings are configured in the CODE_DETAIL table under the code type 'IMTP' (or similar). Always query CODE_DETAIL for the actual IMAGE_TYPE values in your specific instance rather than assuming the codes above are present. Never hardcode image type values in integration scripts.

Image Storage

Image Storage Patterns — URLs, Paths and DAM Integration

Because ITEM_IMAGE.IMAGE_ADDR is a plain VARCHAR2(400), it can hold any string — a relative file path, an absolute URL, a CDN endpoint, or a DAM system identifier. The pattern used has major implications for integration consumers.

⚠️
IMAGE_ADDR is a reference — if the image moves, the reference breaks

Oracle RMS has no mechanism to validate that the URL or path in IMAGE_ADDR actually resolves to a live image. If the CDN is restructured, if a file is renamed, or if the hosting provider changes, the references in ITEM_IMAGE become broken links. Integrations that feed image URLs to e-commerce platforms or storefront systems should include a validation step that checks image reachability — not just that the ITEM_IMAGE row exists.

Physical Dimensions

ITEM_SUPP_COUNTRY_DIM — Physical Dimensions

The ITEM_SUPP_COUNTRY_DIM table stores the physical measurement attributes of an item as specified by a particular supplier from a particular country of origin. Physical dimensions in Oracle RMS are modelled at the item-supplier-country level because the same item sourced from factories in different countries may have slightly different packaging dimensions or weights.

This table is consumed by warehouse management systems (WMS) for bin slotting, carton sizing, and pallet build calculations, and by logistics systems for freight cost estimation.

03ITEM_SUPP_COUNTRY_DIM
ITEM + SUPPLIER + ORIGIN_COUNTRY_ID + DIM_OBJECT composite PK

The composite primary key includes DIM_OBJECT — the level at which the dimension applies. This allows storing dimensions for the individual selling unit, the inner pack, and the outer case on the same item-supplier-country combination.

ColumnTypeDescription
ITEMPKFK
VARCHAR2(25)FK → ITEM_MASTER.ITEM.
SUPPLIERPKFK
NUMBER(10)FK → SUPS.SUPPLIER.
ORIGIN_COUNTRY_IDPK
VARCHAR2(3)FK → ITEM_SUPP_COUNTRY. Country of origin.
DIM_OBJECTPK
VARCHAR2(6)The packaging level: 'EA' = each (selling unit), 'IN' = inner pack, 'CA' = outer case/carton.
WEIGHT
NUMBER(12,4)Item weight in WEIGHT_UOM units for this DIM_OBJECT level.
WEIGHT_UOM
VARCHAR2(4)Unit of measure for weight — KG, LB, etc.
LENGTH
NUMBER(12,4)Physical length in LWHDIM_UOM units.
WIDTH
NUMBER(12,4)Physical width in LWHDIM_UOM units.
HEIGHT
NUMBER(12,4)Physical height in LWHDIM_UOM units.
LWHDIM_UOM
VARCHAR2(4)Unit of measure for length/width/height — CM, IN, MM, etc.
LIQUID_VOLUME
NUMBER(12,4)Liquid capacity for containers. Used for bottles, pouches, etc.
LIQUID_VOLUME_UOM
VARCHAR2(4)Unit of measure for liquid volume — ML, FL (fluid oz), etc.
📦
DIM_OBJECT lets you store dimensions at three packaging levels

A single item from a single supplier sourced from a single country can have three ITEM_SUPP_COUNTRY_DIM rows — one for the individual selling unit (DIM_OBJECT = 'EA'), one for the inner pack ('IN'), and one for the outer case ('CA'). WMS systems typically need all three to correctly calculate pallet builds: the case weight for freight, the inner pack dimensions for shelf slotting, and the each dimensions for individual product display.

Ticketing

Ticketing Attributes — ITEM_TICKET

Oracle RMS has a dedicated ticketing module that drives shelf label and price ticket printing. The ITEM_TICKET table holds the ticket printing configuration for each item — how many tickets to print, when to print them, and in what format.

04ITEM_TICKET
Ticket printing configuration per item
ColumnTypeDescription
ITEMPKFK
VARCHAR2(25)FK → ITEM_MASTER.ITEM.
TICKET_TYPE_IDPK
NUMBER(10)FK → TICKET_TYPE. Defines the label format, size, and content template used for this item.
TICKETS_PER_ITEM
NUMBER(3)Number of tickets printed per unit when a price ticket print job is triggered (e.g. on receipt or price change).
AUTO_TICKET_IND
VARCHAR2(1)Y = tickets are automatically printed when certain events occur (receipt, price change). N = manual print only.

The TICKET_TYPE table defines the actual label template — barcode format (EAN-13, QR, etc.), printed fields (price, description, size, colour), label dimensions, and the printer type it targets. In RMS printing workflows, the ITEM_TICKET row links the item to its label template, and the print batch reads both to generate the correct output for the correct printer.

Extension Model

The Oracle Retail Extension Model

Retailers often need to capture attributes that are not in any Oracle RMS standard table — a proprietary sustainability score, a loyalty exclusion flag, an internal audit field, or a B2B-specific pricing tier. The temptation is to add custom columns directly to ITEM_MASTER or create a completely independent table with no relation to the RMS framework.

Oracle Retail formally documents an extension model — a specific pattern for adding custom attributes that does not break future upgrades and is supported by Oracle's patching and migration tools.

Custom Columns

Adding Custom Columns — The Safe Approach

Oracle Retail ships a set of pre-defined extension tables alongside the core schema. These tables are empty by design — they exist purely to receive custom columns added by the retailer or implementation partner. The most relevant for item data is ITEM_MASTER_EXT.

05ITEM_MASTER_EXT
The sanctioned item extension table

ITEM_MASTER_EXT has the same primary key as ITEM_MASTER — the ITEM column. Oracle Retail guarantees it will not be modified by upgrade patches. When a retailer needs a custom item attribute, the correct pattern is:

  1. Add the custom column to ITEM_MASTER_EXT via ALTER TABLE
  2. Create a corresponding row in ITEM_MASTER_EXT when each new item is created
  3. Access the custom attribute by joining ITEM_MASTER to ITEM_MASTER_EXT on the ITEM column
  4. Expose the attribute through a custom view or API wrapper as needed
ColumnTypeDescription
ITEMPKFK
VARCHAR2(25)FK → ITEM_MASTER.ITEM. The only column present before customisation.
[custom columns]
Any Oracle typeCustom columns added by the retailer. Examples: SUSTAINABILITY_SCORE NUMBER(3), B2B_EXCL_IND VARCHAR2(1), LOYALTY_CATEGORY VARCHAR2(20).
⚠️
Create ITEM_MASTER_EXT rows in the same transaction as ITEM_MASTER

If custom attributes in ITEM_MASTER_EXT are required for all items, the row must be created as part of the item creation transaction — not in a separate step. Items created before the extension table row is inserted will be missing their extension record. A LEFT JOIN from ITEM_MASTER to ITEM_MASTER_EXT will return NULL for their custom columns, which downstream systems may interpret as data errors rather than missing records.

Custom Tables

Custom Extension Tables — The Preferred Approach

For larger sets of custom attributes, or for custom attributes that have their own relationships (e.g. an item can have multiple custom records, or the custom data joins to other reference tables), the better approach is a completely new custom table that references ITEM_MASTER via a foreign key.

06Custom Table Pattern
Independent table with FK to ITEM_MASTER

This pattern is used when the custom attributes are complex enough to warrant their own table — multi-row relationships, their own PK beyond just ITEM, or their own status and lifecycle.

Example — a custom sustainability attributes table:

SQL
-- Custom sustainability attributes table (retailer-defined)
-- References ITEM_MASTER.ITEM — not a core RMS table
CREATE TABLE xxrc_item_sustainability (
item                VARCHAR2(25)  NOT NULL,
carbon_score        NUMBER(5,2),
recycled_pct        NUMBER(5,2),
certifications      VARCHAR2(500),
last_assessed_date  DATE,
assessed_by         VARCHAR2(120),
CONSTRAINT xxrc_item_sust_pk
PRIMARY KEY (item),
CONSTRAINT xxrc_item_sust_fk
FOREIGN KEY (item) REFERENCES item_master(item)
);

The XXRC_ prefix (where RC is the retailer's initials) is the Oracle Retail convention for custom objects — it prevents naming conflicts with any future Oracle-delivered table, view, or package that might use the same name.

RC:Storefront · Self-Hosted Headless E-Commerce
Syncing rich item images and extended attributes to your storefront?

RC:Storefront consumes structured item data — images, categories, custom attributes — from RC:OMS in real time. The same disciplined product data model that Oracle RMS uses for enterprise retail powers clean, image-rich, SEO-ready product pages on RC:Storefront. Self-hosted, zero transaction fees.

See RC:Storefront
Quick Reference

Key Tables — Quick Reference

Item Images & Extended Attributes — Oracle RMS
ITEM_IMAGE
Image references per item
CODE_DETAIL
IMAGE_TYPE valid values
ITEM_SUPP_COUNTRY_DIM
Physical dimensions per sourcing
ITEM_TICKET
Label & ticket printing config
ITEM_MASTER_EXT
Extension table — custom columns
XXRC_* (custom)
Custom tables — complex attributes
Practical SQL

Practical SQL Examples

1. All images for an item with type descriptions

SQL
-- All image records for an item with human-readable type labels
-- Uses CODE_DETAIL to translate IMAGE_TYPE codes
SELECT ii.item,
ii.image_type,
cd.code_desc                    image_type_desc,
ii.image_addr,
ii.image_desc,
ii.image_indate
FROM   item_image   ii
LEFT JOIN code_detail cd ON  cd.code_type = 'IMTP'
AND cd.code      = ii.image_type
WHERE  ii.item = :v_item
ORDER BY cd.display_seq, ii.image_type;

2. Items missing a primary image — e-commerce readiness check

SQL
-- Active transaction-level items with no primary (type 'A') image
-- Run before a digital channel launch to find items that will have no image
SELECT im.item,
im.item_desc,
im.dept,
dp.dept_name,
im.status
FROM   item_master  im
JOIN   deps         dp ON dp.dept = im.dept
WHERE  im.status     = 'A'
AND  im.item_level = im.tran_level
AND  NOT EXISTS (
SELECT 1
FROM   item_image ii
WHERE  ii.item       = im.item
AND  ii.image_type = 'A'         -- primary image type
AND  ii.image_addr IS NOT NULL
AND  TRIM(ii.image_addr) != ' '
)
ORDER BY dp.dept_name, im.item_desc;

3. Physical dimensions for an item across all sourcing countries

SQL
-- Item dimensions at each packaging level per supplier and country
SELECT d.item,
s.supp_name,
d.origin_country_id,
d.dim_object,
d.weight,
d.weight_uom,
d.length,
d.width,
d.height,
d.lwhdim_uom,
-- Calculated volume in cubic units
ROUND(d.length * d.width * d.height, 4) cubic_volume
FROM   item_supp_country_dim  d
JOIN   sups                   s ON s.supplier = d.supplier
WHERE  d.item = :v_item
ORDER BY d.origin_country_id, d.supplier,
DECODE(d.dim_object, 'EA', 1, 'IN', 2, 'CA', 3);

4. Items missing case dimensions — WMS integration readiness check

SQL
-- Active items with a primary supplier but no outer case (CA) dimensions
-- WMS cannot slot or plan freight without case dimensions
SELECT im.item,
im.item_desc,
is2.supplier,
s.supp_name,
is2.primary_country_id
FROM   item_master   im
JOIN   item_supplier is2 ON  is2.item             = im.item
AND is2.primary_supp_ind  = 'Y'
JOIN   sups          s   ON  s.supplier            = is2.supplier
WHERE  im.status     = 'A'
AND  im.item_level = im.tran_level
AND  NOT EXISTS (
SELECT 1
FROM   item_supp_country_dim d
WHERE  d.item              = im.item
AND  d.supplier          = is2.supplier
AND  d.origin_country_id = is2.primary_country_id
AND  d.dim_object        = 'CA'
AND  d.weight            > 0
)
ORDER BY im.dept, im.item_desc;

5. Full item data export — master, images, dimensions and custom attributes

SQL
-- Combined item export across all attribute layers
-- Joins ITEM_MASTER, ITEM_IMAGE (primary), ITEM_SUPP_COUNTRY_DIM (case),
-- ITEM_MASTER_EXT (custom), and ITEM_DESC — one row per item
SELECT im.item,
id.item_desc,
id.short_desc,
im.dept,
dp.dept_name,
im.status,
im.unit_of_measure,
-- Primary image URL
img.image_addr                  primary_image_url,
-- Case weight for logistics
dim.weight                      case_weight_kg,
dim.length                      case_length_cm,
dim.width                       case_width_cm,
dim.height                      case_height_cm,
-- Custom extension attributes (add columns as configured)
ext.sustainability_score,
ext.b2b_excl_ind
FROM   item_master          im
JOIN   item_desc            id   ON  id.item = im.item
AND id.lang = (SELECT lang FROM comphead)
JOIN   deps                 dp   ON  dp.dept = im.dept
-- Primary image — LEFT JOIN: items without images still appear
LEFT JOIN item_image        img  ON  img.item       = im.item
AND img.image_type  = 'A'
-- Case dimensions from primary supplier-country — LEFT JOIN
LEFT JOIN item_supplier     is2  ON  is2.item             = im.item
AND is2.primary_supp_ind  = 'Y'
LEFT JOIN item_supp_country_dim dim ON  dim.item              = im.item
AND dim.supplier          = is2.supplier
AND dim.origin_country_id = is2.primary_country_id
AND dim.dim_object        = 'CA'
-- Custom extension table — LEFT JOIN
LEFT JOIN item_master_ext   ext  ON ext.item = im.item
WHERE  im.status     = 'A'
AND  im.item_level = im.tran_level
ORDER BY dp.dept_name, im.item_desc;
Gotchas

Common Gotchas for Developers

  • !

    Hardcoding IMAGE_TYPE values like 'A' or 'B' in integration scripts. The IMAGE_TYPE codes are retailer-configured values in CODE_DETAIL. One implementation uses 'A' for the primary image; another uses 'PRIMARY'; another uses 'F'. Scripts that hardcode these values will silently return no rows in any environment that uses different codes. Always look up the valid codes from CODE_DETAIL WHERE code_type = 'IMTP' and parameterise them.

  • !

    Treating a non-NULL IMAGE_ADDR as a valid, reachable image.

    ITEM_IMAGE.IMAGE_ADDR is a free-text field. A row can exist with a value in IMAGE_ADDR that is a broken URL, a path to a file that was deleted, or a placeholder string entered during data migration. The presence of a row in ITEM_IMAGE does not guarantee the image is live. Always validate image reachability in integration pipelines that feed e-commerce or customer-facing systems.

  • !

    Adding custom columns directly to ITEM_MASTER instead of ITEM_MASTER_EXT. This is the most damaging implementation mistake in Oracle Retail projects. Custom columns on core tables survive until the next Oracle patch is applied. Any patch that modifies the column structure of ITEM_MASTER will conflict with custom columns and fail. Oracle Support will not assist with upgrade issues on modified core tables. Custom attributes always go into ITEM_MASTER_EXT or a custom XXRC_* table.

  • !

    Not creating ITEM_MASTER_EXT rows when items are created. If the extension table pattern is in use, every new item must have a corresponding row in ITEM_MASTER_EXT. Item creation scripts or staging batch processes that do not include this INSERT will leave items without extension records. Queries that INNER JOIN to ITEM_MASTER_EXT will silently exclude those items from all results.

  • !

    Querying ITEM_SUPP_COUNTRY_DIM without filtering on DIM_OBJECT.

    A single item can have up to three ITEM_SUPP_COUNTRY_DIM rows per supplier-country combination — one for each DIM_OBJECT (EA, IN, CA). Querying without a DIM_OBJECT filter returns up to three rows per item. Any query that selects dimension values into scalar variables will throw TOO_MANY_ROWS. Always filter by the specific DIM_OBJECT you need for your use case.

  • !

    Using ITEM_IMAGE for full-resolution binary storage via LONG RAW or BLOB workarounds.

    Some older implementations attempted to store binary image data in the database using workaround columns on custom extension tables. This makes the RMS database grow very large, slows down all operations on those tables, and creates backup and recovery challenges. Oracle Retail's design intent is clear: ITEM_IMAGE stores references, not data. Binary image storage belongs in a dedicated file system, object store, or DAM system.

Key Takeaways

Key Takeaways
  • ITEM_IMAGE stores URL or path references to images — not binary data. The IMAGE_TYPE column (PK with ITEM) identifies the image's purpose. Valid IMAGE_TYPE values are in CODE_DETAIL — never hardcode them.
  • ITEM_SUPP_COUNTRY_DIM stores physical dimensions at three packaging levels: each (EA), inner pack (IN), and outer case (CA) — per item, per supplier, per country of origin. Always filter on DIM_OBJECT or you get up to three rows per item.
  • ITEM_TICKET links items to their label printing templates. AUTO_TICKET_IND = 'Y' triggers automatic print jobs on configurable events such as receipt or price change.
  • Custom item attributes must never be added to ITEM_MASTER directly — patches will conflict. Use ITEM_MASTER_EXT for simple column additions (Oracle-sanctioned extension table) or a custom XXRC_ table with a FK to ITEM_MASTER for complex structures.
  • The XXRC_ prefix is the Oracle Retail naming convention for custom objects. It prevents naming conflicts with any future Oracle-delivered table, view, or package.
  • A non-NULL IMAGE_ADDR is not proof of a live image. Integration pipelines feeding customer-facing systems should validate image reachability, not just the presence of a row in ITEM_IMAGE.
RetailCoder
All systems operational
v1.0 Live

RC:OMS

Multi-channel order management with double-entry inventory ledger. Amazon, Flipkart, Shopify, WooCommerce — one source of truth.

Launch demo →
v1.0 Live

RC:Storefront

Self-hosted headless e-commerce. Your server, your data, zero transaction fees. Native RC:OMS inventory sync.

Visit Storefront →
Pipeline

RC:Pulse

AI-powered retail analytics and demand forecasting — built natively on top of your RC:OMS and Storefront data.

Request early access →
Built in India 🇮🇳  ·  Architected by Priyanshu PandeyTalk to an engineer →