# Oracle EBS Purchasing and Receiving Tables Reference (PO, Requisition, RCV)

> Source: https://netray.co/tools/oracle-ebs-purchasing-receiving-tables-reference
> Publisher: Netray (netray.co), AI and integration engineering for ERP and manufacturing systems.
> Section: Free Tools

## Short answer

PO, requisition, release, receiving, archive and open interface tables for EBS 12.1/12.2, with keys, joins and status columns.

## Category

oracle

## Erp

Oracle E-Business Suite

## Audience

- Oracle EBS developer
- Purchasing consultant
- Report writer
- ERP administrator

## Tool

**Kind:** worksheet

**Mode:** reference

**Columns:**

#### Table

**Key:** tbl

**Type:** text

#### Area

**Key:** area

**Type:** select

**Options:**

- PO
- Requisition
- Release
- Receiving
- Interface
- Approval

#### Holds

**Key:** holds

**Type:** text

#### Primary key

**Key:** pk

**Type:** text

#### Joins to

**Key:** joins

**Type:** text

#### Notes

**Key:** notes

**Type:** text

**Rows:**

**Tbl:** PO_HEADERS_ALL

**Area:** PO

**Holds:** PO, blanket agreement, contract and planned PO headers

**Pk:** PO_HEADER_ID

**Joins:** VENDOR_ID = AP_SUPPLIERS.VENDOR_ID; VENDOR_SITE_ID = AP_SUPPLIER_SITES_ALL.VENDOR_SITE_ID; AGENT_ID = PO_AGENTS.AGENT_ID

**Notes:** SEGMENT1 is the PO number; TYPE_LOOKUP_CODE STANDARD, BLANKET, CONTRACT, PLANNED; AUTHORIZATION_STATUS (APPROVED, IN PROCESS, INCOMPLETE, REJECTED, REQUIRES REAPPROVAL); CLOSED_CODE; REVISION_NUM

**Tbl:** PO_LINES_ALL

**Area:** PO

**Holds:** PO lines: item or description, price, quantity, category

**Pk:** PO_LINE_ID

**Joins:** PO_HEADER_ID; ITEM_ID = MTL_SYSTEM_ITEMS_B.INVENTORY_ITEM_ID; CATEGORY_ID = MTL_CATEGORIES_B; LINE_TYPE_ID = PO_LINE_TYPES_B

**Notes:** LINE_NUM, UNIT_PRICE, QUANTITY, ITEM_DESCRIPTION; on a blanket the line is the agreement line

**Tbl:** PO_LINE_LOCATIONS_ALL

**Area:** PO

**Holds:** Shipments (schedules) under each line; also blanket price breaks

**Pk:** LINE_LOCATION_ID

**Joins:** PO_LINE_ID, PO_HEADER_ID; PO_RELEASE_ID for release shipments; SHIP_TO_ORGANIZATION_ID

**Notes:** QUANTITY, QUANTITY_RECEIVED, QUANTITY_ACCEPTED, QUANTITY_REJECTED, QUANTITY_BILLED, QUANTITY_CANCELLED; NEED_BY_DATE, PROMISED_DATE; SHIPMENT_TYPE; RECEIPT_REQUIRED_FLAG and INSPECTION_REQUIRED_FLAG set 2-, 3- or 4-way match

**Tbl:** PO_DISTRIBUTIONS_ALL

**Area:** PO

**Holds:** Accounting and destination for each shipment

**Pk:** PO_DISTRIBUTION_ID

**Joins:** LINE_LOCATION_ID, PO_LINE_ID, PO_HEADER_ID, PO_RELEASE_ID; CODE_COMBINATION_ID = GL_CODE_COMBINATIONS; REQ_DISTRIBUTION_ID = PO_REQ_DISTRIBUTIONS_ALL.DISTRIBUTION_ID

**Notes:** QUANTITY_ORDERED, QUANTITY_DELIVERED, QUANTITY_BILLED; DESTINATION_TYPE_CODE INVENTORY, EXPENSE, SHOP FLOOR; ACCRUAL_ACCOUNT_ID, VARIANCE_ACCOUNT_ID; PROJECT_ID, TASK_ID

**Tbl:** PO_RELEASES_ALL

**Area:** Release

**Holds:** Releases against blanket agreements and scheduled releases against planned POs

**Pk:** PO_RELEASE_ID

**Joins:** PO_HEADER_ID = the blanket or planned PO header

**Notes:** RELEASE_NUM; users quote it as PO number-release number; RELEASE_TYPE BLANKET or SCHEDULED; AUTHORIZATION_STATUS

**Tbl:** PO_REQUISITION_HEADERS_ALL

**Area:** Requisition

**Holds:** Purchase and internal requisition headers

**Pk:** REQUISITION_HEADER_ID

**Joins:** PREPARER_ID = PER_ALL_PEOPLE_F.PERSON_ID

**Notes:** SEGMENT1 is the requisition number; TYPE_LOOKUP_CODE PURCHASE or INTERNAL; AUTHORIZATION_STATUS

**Tbl:** PO_REQUISITION_LINES_ALL

**Area:** Requisition

**Holds:** Requisition lines with item, quantity, need-by date and source

**Pk:** REQUISITION_LINE_ID

**Joins:** REQUISITION_HEADER_ID; LINE_LOCATION_ID = PO_LINE_LOCATIONS_ALL.LINE_LOCATION_ID once placed on a PO

**Notes:** SOURCE_TYPE_CODE VENDOR or INVENTORY; DESTINATION_ORGANIZATION_ID; TO_PERSON_ID is the requester

**Tbl:** PO_REQ_DISTRIBUTIONS_ALL

**Area:** Requisition

**Holds:** Charge account and quantity per requisition line

**Pk:** DISTRIBUTION_ID

**Joins:** REQUISITION_LINE_ID; DISTRIBUTION_ID = PO_DISTRIBUTIONS_ALL.REQ_DISTRIBUTION_ID

**Notes:** Key column is DISTRIBUTION_ID, not REQ_DISTRIBUTION_ID; CODE_COMBINATION_ID; REQ_LINE_QUANTITY

**Tbl:** PO_ACTION_HISTORY

**Area:** Approval

**Holds:** Approval history for POs, releases and requisitions

**Pk:** OBJECT_ID + OBJECT_TYPE_CODE + SEQUENCE_NUM

**Joins:** OBJECT_ID = PO_HEADER_ID, PO_RELEASE_ID or REQUISITION_HEADER_ID depending on OBJECT_TYPE_CODE; EMPLOYEE_ID = PER_ALL_PEOPLE_F.PERSON_ID

**Notes:** OBJECT_TYPE_CODE PO, PA, RELEASE, REQUISITION; ACTION_CODE SUBMIT, APPROVE, REJECT, FORWARD; the row with null ACTION_CODE is the pending approver

**Tbl:** PO_AGENTS

**Area:** PO

**Holds:** Employees set up as buyers

**Pk:** AGENT_ID

**Joins:** AGENT_ID = PER_ALL_PEOPLE_F.PERSON_ID; = PO_HEADERS_ALL.AGENT_ID

**Notes:** START_DATE_ACTIVE, END_DATE_ACTIVE; CATEGORY_ID default; not org-striped

**Tbl:** PO_DOCUMENT_TYPES_ALL_B

**Area:** Approval

**Holds:** Document type controls per operating unit: approval workflow, forwarding, archiving

**Pk:** DOCUMENT_TYPE_CODE + DOCUMENT_SUBTYPE + ORG_ID

**Joins:** Translated TYPE_NAME in PO_DOCUMENT_TYPES_ALL_TL

**Notes:** WF_APPROVAL_ITEMTYPE and WF_APPROVAL_PROCESS (for example POAPPRV, REQAPPRV); ARCHIVE_EXTERNAL_REVISION_CODE; FORWARDING_MODE_CODE

**Tbl:** PO_HEADERS_ARCHIVE_ALL

**Area:** PO

**Holds:** Header copy for each archived revision

**Pk:** PO_HEADER_ID + REVISION_NUM

**Joins:** PO_HEADER_ID = PO_HEADERS_ALL.PO_HEADER_ID

**Notes:** LATEST_EXTERNAL_FLAG = 'Y' marks the latest archived revision; archived on approve or print per document type setup

**Tbl:** PO_LINES_ARCHIVE_ALL

**Area:** PO

**Holds:** Line copy for each archived revision

**Pk:** PO_LINE_ID + REVISION_NUM

**Joins:** PO_LINE_ID, PO_HEADER_ID

**Notes:** Shipments and distributions have matching PO_LINE_LOCATIONS_ARCHIVE_ALL and PO_DISTRIBUTIONS_ARCHIVE_ALL

**Tbl:** RCV_SHIPMENT_HEADERS

**Area:** Receiving

**Holds:** Receipt and ASN or in-transit shipment headers

**Pk:** SHIPMENT_HEADER_ID

**Joins:** VENDOR_ID, VENDOR_SITE_ID; SHIP_TO_ORG_ID

**Notes:** RECEIPT_NUM is the receipt number; RECEIPT_SOURCE_CODE VENDOR, INVENTORY, INTERNAL ORDER, CUSTOMER; SHIPMENT_NUM for ASNs; not org-striped by ORG_ID

**Tbl:** RCV_SHIPMENT_LINES

**Area:** Receiving

**Holds:** Receipt and shipment lines

**Pk:** SHIPMENT_LINE_ID

**Joins:** SHIPMENT_HEADER_ID; PO_HEADER_ID, PO_LINE_ID, PO_LINE_LOCATION_ID, PO_DISTRIBUTION_ID; ITEM_ID + TO_ORGANIZATION_ID

**Notes:** QUANTITY_SHIPPED, QUANTITY_RECEIVED; SHIPMENT_LINE_STATUS_CODE; SOURCE_DOCUMENT_CODE PO, REQ, INVENTORY, RMA

**Tbl:** RCV_TRANSACTIONS

**Area:** Receiving

**Holds:** Every receiving transaction: receipt, inspection, delivery, return, correction

**Pk:** TRANSACTION_ID

**Joins:** PARENT_TRANSACTION_ID = the transaction it acts on; SHIPMENT_HEADER_ID, SHIPMENT_LINE_ID; PO_HEADER_ID, PO_LINE_LOCATION_ID, PO_DISTRIBUTION_ID

**Notes:** TRANSACTION_TYPE RECEIVE, ACCEPT, REJECT, TRANSFER, DELIVER, CORRECT, RETURN TO VENDOR, RETURN TO RECEIVING; DESTINATION_TYPE_CODE RECEIVING, INVENTORY, EXPENSE, SHOP FLOOR

**Tbl:** RCV_SUPPLY

**Area:** Receiving

**Holds:** Quantity sitting in receiving or in transit, not yet delivered

**Pk:** No single surrogate key; RCV_TRANSACTION_ID identifies receiving supply

**Joins:** RCV_TRANSACTION_ID = RCV_TRANSACTIONS.TRANSACTION_ID; SHIPMENT_LINE_ID; PO_DISTRIBUTION_ID

**Notes:** SUPPLY_TYPE_CODE RECEIVING or SHIPMENT; drives what the Receiving Transactions form offers for delivery

**Tbl:** MTL_SUPPLY

**Area:** Receiving

**Holds:** Supply picture used by planning and receiving: open PO, approved req, in transit, in receiving

**Pk:** No single surrogate key; SUPPLY_TYPE_CODE + SUPPLY_SOURCE_ID

**Joins:** PO_HEADER_ID, PO_LINE_ID, PO_LINE_LOCATION_ID, PO_DISTRIBUTION_ID; REQ_HEADER_ID, REQ_LINE_ID; SHIPMENT_LINE_ID

**Notes:** SUPPLY_TYPE_CODE PO, REQ, SHIPMENT, RECEIVING; a missing MTL_SUPPLY row is a classic cause of 'cannot receive this PO'

**Tbl:** PO_HEADERS_INTERFACE

**Area:** Interface

**Holds:** PDOI header rows for standard POs, blankets and catalogs

**Pk:** INTERFACE_HEADER_ID

**Joins:** Children by INTERFACE_HEADER_ID; BATCH_ID groups a run

**Notes:** ACTION ORIGINAL, UPDATE, REPLACE; DOCUMENT_TYPE_CODE; PROCESS_CODE (PENDING, ACCEPTED, REJECTED); APPROVAL_STATUS

**Tbl:** PO_LINES_INTERFACE

**Area:** Interface

**Holds:** PDOI line rows (in 12.1 and earlier also shipment data)

**Pk:** INTERFACE_LINE_ID

**Joins:** INTERFACE_HEADER_ID

**Notes:** LINE_NUM, SHIPMENT_NUM, ITEM or ITEM_ID, QUANTITY, UNIT_PRICE; PROCESS_CODE

**Tbl:** PO_LINE_LOCATIONS_INTERFACE

**Area:** Interface

**Holds:** PDOI shipment rows (R12)

**Pk:** INTERFACE_LINE_LOCATION_ID

**Joins:** INTERFACE_HEADER_ID, INTERFACE_LINE_ID

**Notes:** Use for multiple shipments per line; otherwise PDOI derives one shipment from the line row

**Tbl:** PO_DISTRIBUTIONS_INTERFACE

**Area:** Interface

**Holds:** PDOI distribution rows

**Pk:** INTERFACE_DISTRIBUTION_ID

**Joins:** INTERFACE_HEADER_ID, INTERFACE_LINE_ID (and INTERFACE_LINE_LOCATION_ID in R12)

**Notes:** CHARGE_ACCOUNT_ID or segments; DISTRIBUTION_NUM; QUANTITY_ORDERED

**Tbl:** PO_REQUISITIONS_INTERFACE_ALL

**Area:** Interface

**Holds:** Requisition Import rows (one row per requisition line)

**Pk:** TRANSACTION_ID

**Joins:** REQ_DIST_SEQUENCE_ID = PO_REQ_DIST_INTERFACE_ALL.DIST_SEQUENCE_ID when MULTI_DISTRIBUTIONS = 'Y'

**Notes:** INTERFACE_SOURCE_CODE, BATCH_ID; PROCESS_FLAG = 'ERROR' on failure; SOURCE_TYPE_CODE, DESTINATION_TYPE_CODE, AUTHORIZATION_STATUS, PREPARER_ID

**Tbl:** PO_REQ_DIST_INTERFACE_ALL

**Area:** Interface

**Holds:** Multiple distributions for one interfaced requisition line

**Pk:** DIST_SEQUENCE_ID + DISTRIBUTION_NUMBER

**Joins:** DIST_SEQUENCE_ID = PO_REQUISITIONS_INTERFACE_ALL.REQ_DIST_SEQUENCE_ID

**Notes:** Only used when the line needs more than one charge account

**Tbl:** PO_INTERFACE_ERRORS

**Area:** Interface

**Holds:** Errors from PDOI, Requisition Import and the Receiving Transaction Processor

**Pk:** No single surrogate key; filter by INTERFACE_TYPE and the interface IDs

**Joins:** INTERFACE_TRANSACTION_ID = PO_REQUISITIONS_INTERFACE_ALL.TRANSACTION_ID (REQIMPORT); INTERFACE_HEADER_ID / INTERFACE_LINE_ID to PDOI or RCV interface rows

**Notes:** INTERFACE_TYPE (for example PO_DOCS_OPEN_INTERFACE, REQIMPORT), TABLE_NAME, COLUMN_NAME, ERROR_MESSAGE, ERROR_MESSAGE_NAME, REQUEST_ID, BATCH_ID

**Tbl:** RCV_HEADERS_INTERFACE

**Area:** Interface

**Holds:** Receipt and ASN headers to be processed

**Pk:** HEADER_INTERFACE_ID

**Joins:** HEADER_INTERFACE_ID = RCV_TRANSACTIONS_INTERFACE.HEADER_INTERFACE_ID; GROUP_ID

**Notes:** PROCESSING_STATUS_CODE; RECEIPT_SOURCE_CODE; TRANSACTION_TYPE NEW; VENDOR_ID; SHIP_TO_ORGANIZATION_ID; VALIDATION_FLAG

**Tbl:** RCV_TRANSACTIONS_INTERFACE

**Area:** Interface

**Holds:** Receiving transactions waiting for or rejected by the Receiving Transaction Processor

**Pk:** INTERFACE_TRANSACTION_ID

**Joins:** HEADER_INTERFACE_ID; GROUP_ID; PO_HEADER_ID, PO_LINE_LOCATION_ID; PARENT_TRANSACTION_ID for deliver or correct

**Notes:** PROCESSING_STATUS_CODE (PENDING, RUNNING, ERROR, COMPLETED) and TRANSACTION_STATUS_CODE (PENDING, ERROR); PROCESSING_MODE_CODE BATCH, IMMEDIATE, ONLINE; AUTO_TRANSACT_CODE DELIVER receives and delivers in one step

**Tbl:** PO_VENDORS

**Area:** PO

**Holds:** Supplier view kept for 11i compatibility

**Pk:** VENDOR_ID

**Joins:** VENDOR_ID = PO_HEADERS_ALL.VENDOR_ID

**Notes:** In R12 a view over AP_SUPPLIERS (suppliers live in TCA with AP_SUPPLIERS as the AP layer); write new code against AP_SUPPLIERS and AP_SUPPLIER_SITES_ALL

**Notes:** Scope: Oracle EBS 12.1 and 12.2 Purchasing (PO) and Receiving (RCV). Verify columns for your patch level in eTRM before production use.

## Content

**Intro:** A searchable reference for the Oracle EBS 12.1/12.2 purchasing, requisition and receiving tables, including the open interface and error tables you check when an import fails. Rows give the primary key, the joins that matter and the status columns to read.

**Sections:**

#### The PO hierarchy: header, line, shipment, distribution

**Body:** A standard PO has four levels. PO_HEADERS_ALL (supplier, buyer, status) has many PO_LINES_ALL (item, price), each line has one or more shipments in PO_LINE_LOCATIONS_ALL (ship-to org, need-by date, quantity received and billed), and each shipment has one or more distributions in PO_DISTRIBUTIONS_ALL (charge account, destination, quantity delivered). Receiving updates the shipment and distribution quantities; AP matching updates QUANTITY_BILLED. Blanket releases add PO_RELEASES_ALL: the release has no lines of its own, its shipments sit in PO_LINE_LOCATIONS_ALL with PO_RELEASE_ID set and point back to the blanket line. When summing open quantity, work at shipment level and subtract QUANTITY_RECEIVED and QUANTITY_CANCELLED from QUANTITY.

**Bullets:**

- Header to line: PO_HEADER_ID
- Line to shipment: PO_LINE_ID
- Shipment to distribution: LINE_LOCATION_ID
- Release shipments: PO_LINE_LOCATIONS_ALL.PO_RELEASE_ID = PO_RELEASES_ALL.PO_RELEASE_ID

#### Linking a requisition to its PO

**Body:** The dependable link is at distribution level: PO_DISTRIBUTIONS_ALL.REQ_DISTRIBUTION_ID = PO_REQ_DISTRIBUTIONS_ALL.DISTRIBUTION_ID, then PO_REQ_DISTRIBUTIONS_ALL.REQUISITION_LINE_ID to the requisition line and REQUISITION_HEADER_ID to the header. PO_REQUISITION_LINES_ALL.LINE_LOCATION_ID also points to the PO shipment once AutoCreate or Create Documents places the line, which is handy for a quick check of which requisition lines are still unplaced (LINE_LOCATION_ID is null, not cancelled, approved header). Internal requisitions do not create a PO; they are sourced from inventory and become internal sales orders, so their trail continues into OE_ORDER_LINES_ALL rather than PO tables.

#### Receiving interface errors

**Body:** Receipts loaded through RCV_HEADERS_INTERFACE and RCV_TRANSACTIONS_INTERFACE are processed by the Receiving Transaction Processor (RVCTP). After a run, rows with PROCESSING_STATUS_CODE = 'ERROR' or TRANSACTION_STATUS_CODE = 'ERROR' failed. The message is in PO_INTERFACE_ERRORS, joined on INTERFACE_HEADER_ID to RCV_HEADERS_INTERFACE.HEADER_INTERFACE_ID and INTERFACE_LINE_ID to RCV_TRANSACTIONS_INTERFACE.INTERFACE_TRANSACTION_ID, with ERROR_MESSAGE and COLUMN_NAME telling you what failed validation. Users can also see failures in the Transaction Status Summary form in Purchasing. Common causes are a closed shipment, a quantity over tolerance, a missing MTL_SUPPLY row, or a lot or serial not supplied for a controlled item. Fix the data and set the rows back to PENDING with a new GROUP_ID, or delete and reload.

#### Archive tables and revisions

**Body:** When a document type is set to archive on approve (or on print), each approved revision is copied to PO_HEADERS_ARCHIVE_ALL, PO_LINES_ARCHIVE_ALL, PO_LINE_LOCATIONS_ARCHIVE_ALL and PO_DISTRIBUTIONS_ARCHIVE_ALL, keyed by the base ID plus REVISION_NUM. LATEST_EXTERNAL_FLAG = 'Y' marks the most recently archived revision. To see what changed between revisions, compare two archive rows for the same PO_LINE_ID. Note that an unapproved change raises REVISION_NUM on the base table but only reaches the archive after approval, so the base table can be one revision ahead. Approval history for the same document is in PO_ACTION_HISTORY with OBJECT_TYPE_CODE = 'PO' and OBJECT_ID = PO_HEADER_ID.

**Cta:** If your buyers and receiving team want to ask Oracle EBS about open POs, late shipments and stuck receipts in plain English on your own servers, we can set that up read-only over these tables.

**Faq:**

#### What are the main PO tables in Oracle EBS?

**Answer:** PO_HEADERS_ALL, PO_LINES_ALL, PO_LINE_LOCATIONS_ALL (shipments) and PO_DISTRIBUTIONS_ALL, joined by PO_HEADER_ID, PO_LINE_ID and LINE_LOCATION_ID. Releases are in PO_RELEASES_ALL, approval history in PO_ACTION_HISTORY and archived revisions in the _ARCHIVE_ALL tables. Receipts are in RCV_SHIPMENT_HEADERS, RCV_SHIPMENT_LINES and RCV_TRANSACTIONS.

#### What are the PO interface tables?

**Answer:** Purchasing Documents Open Interface uses PO_HEADERS_INTERFACE, PO_LINES_INTERFACE, PO_LINE_LOCATIONS_INTERFACE (R12) and PO_DISTRIBUTIONS_INTERFACE, loaded by Import Standard Purchase Orders (POXPOPDOI) for standard POs. Requisitions use PO_REQUISITIONS_INTERFACE_ALL and PO_REQ_DIST_INTERFACE_ALL with Requisition Import. Receipts use RCV_HEADERS_INTERFACE and RCV_TRANSACTIONS_INTERFACE.

#### Where do Requisition Import errors go?

**Answer:** To PO_INTERFACE_ERRORS with INTERFACE_TYPE = 'REQIMPORT'. Join INTERFACE_TRANSACTION_ID to PO_REQUISITIONS_INTERFACE_ALL.TRANSACTION_ID; the failed interface rows have PROCESS_FLAG = 'ERROR'. The Requisition Import Exceptions report lists the same messages. Fix the data, reset PROCESS_FLAG to null and rerun import for the same INTERFACE_SOURCE_CODE and BATCH_ID.

#### Which tables hold inventory receipts in Oracle EBS?

**Answer:** Receipt headers are in RCV_SHIPMENT_HEADERS (RECEIPT_NUM), lines in RCV_SHIPMENT_LINES and each step (RECEIVE, ACCEPT, DELIVER, RETURN TO VENDOR) in RCV_TRANSACTIONS. A delivery to inventory also creates a row in MTL_MATERIAL_TRANSACTIONS, linked by RCV_TRANSACTION_ID, which is where on-hand changes. Quantity not yet delivered is in RCV_SUPPLY.

## Search terms

po tables in oracle ebs, oracle ebs purchase order tables, oracle ebs po interface tables, oracle ebs inventory receipt tables, oracle ebs requisition interface error table, rcv_transactions transaction_type values, po_distributions_all req_distribution_id

---
Talk to an engineer: https://netray.co/contact?intent=erp_ai | Machine catalog: https://netray.co/agent/catalog.json
