Write data to Oracle E-Business Suite via direct database connection using the oracledb thin driver.
| Feature | Description |
|---|---|
| Preset Mode | Select EBS module and interface table from dropdowns — component handles column validation and defaults |
| Custom Mode | Write to any Oracle table with full flexibility |
| INSERT / UPSERT | Simple insert or MERGE (update existing + insert new) by primary key |
| Column Mapping | Rename input columns to match Oracle target columns |
| Multi-Org Support | Automatically inject ORG_ID for multi-org interface tables |
| GL Ledger Support | Automatically inject LEDGER_ID for General Ledger interface |
| Sync Actions | Test connection, test REST connection, test APPS connection, list operating units, list ledgers, list modules, list entities, list target columns |
The component ships with Oracle Instant Client Basic Light (~50 MB) embedded in the Docker image so it connects out of the box against any supported Oracle EBS version — including older installations that only advertise the legacy 10G password verifier or run with sec_case_sensitive_logon = FALSE. No Oracle client installation is required on customer infrastructure; the component speaks to the EBS database directly.
Internally, python-oracledb runs in thick mode when the bundled Instant Client is loadable, and falls back to thin mode otherwise. Thick mode transparently handles the full range of Oracle authentication protocols (10G, 11G, 12C).
Oracle Instant Client is distributed under the Oracle Free Use Terms and Conditions (FUTC) and is freely redistributable in third-party applications.
The configured DB user needs:
CREATE SESSIONSELECTonapps.hr_operating_units,apps.gl_ledgers,apps.fnd_concurrent_requests,sys.all_tables,sys.all_tab_columnsINSERTon each target interface table (e.g.apps.ap_invoices_interface,apps.po_headers_interface,apps.mtl_transactions_interface)EXECUTEonapps.fnd_request(to submit concurrent programs) andapps.fnd_global(to initialize responsibility context)
Note:
apps.fnd_global.apps_initializeand theapps.fnd_core_logpackage it calls internally areAUTHID CURRENT_USER. When invoked by a non-APPS user (e.g.keboola_wr), unqualified table references inside those packages resolve in the caller's namespace and typically fail withORA-00942: table or view does not exist. The grants list to make a non-APPS user work is large (~70 synonyms + ~30 grants per Oracle Support Note 822225.1) and Oracle has no equivalent note forfnd_request.submit_request. The component therefore supports an optional second credential pair (apps_user/#apps_password) used only for the FND_GLOBAL/FND_REQUEST PL/SQL block during concurrent program submission. Bulk INSERTs into_INTERFACEtables continue to run asdb_user. See Connection Settings below.
When the Oracle EBS database isn't directly reachable from Keboola — e.g. it sits inside a private VPC with a bastion host in front — enable the SSH Tunnel section in the configuration. The component opens an sshtunnel-managed forward to the configured db_host:db_port over an SSH session to the bastion, then the Oracle thin/thick driver connects to the local end of that tunnel.
The Keboola UI auto-generates an SSH keypair when you enable the section — copy the displayed public key onto the bastion's ~/.ssh/authorized_keys, then fill in SSH host, SSH port (default 22), and SSH user. The component never accepts inbound connections — it only opens an outbound SSH session.
The REST API does not flow through the SSH tunnel — it goes directly to rest_url over HTTPS. If the REST endpoint is also private, customers typically expose it through a separate VPN or reverse proxy.
For preset modes that use the ISG REST API (tca.hz_create_organization, tca.hz_create_person, tca.hz_create_cust_account, ar.ar_invoice_create), a separate ISG-enabled EBS responsibility is required — typically SYSADMIN or a custom responsibility with access to the hzparty, hzcustaccount, hzpartysite, and arinvoice services at http://<host>:8000/webservices/rest/.
- AP — Accounts Payable (
AP_INVOICES_INTERFACE,AP_INVOICE_LINES_INTERFACE) - PO — Purchasing (
PO_HEADERS_INTERFACE,PO_LINES_INTERFACE) - INV — Inventory (
MTL_TRANSACTIONS_INTERFACE) - OM — Order Management (
OE_HEADERS_IFACE_ALL,OE_LINES_IFACE_ALL) - GL — General Ledger (
GL_INTERFACE) — requires Journal Import fixtures to be fully installed; some Vision Demo appliances ship with the editioning view present but the base table missing
- TCA — Create Organization / Create Person / Create Customer Account
- AR — Create Invoice (
ar_invoice_create)
| Parameter | Description |
|---|---|
db_host |
Oracle database server hostname or IP |
db_port |
Port (default: 1521) |
db_service_name |
Oracle service name (e.g. ebs_EBSDB) |
db_user |
Database username — used for bulk INSERTs into _INTERFACE tables and read sync actions |
#db_password |
Database password (encrypted) |
rest_url |
(Optional) ISG REST API base URL for TCA / AR writes |
rest_user |
(Optional) ISG REST API username (typically SYSADMIN) |
#rest_password |
(Optional) ISG REST API password (encrypted) |
apps_user |
(Optional) APPS-equivalent username, used only to submit concurrent programs (FND_GLOBAL.APPS_INITIALIZE + FND_REQUEST.SUBMIT_REQUEST). Required if db_user is not APPS and lacks the grants from Oracle Support Note 822225.1. Falls back to db_user when empty. |
#apps_password |
(Optional) APPS-equivalent password (encrypted). Falls back to #db_password when empty. |
| Parameter | Description |
|---|---|
write_mode |
preset (guided) or custom (any table) |
module |
EBS module code (preset mode) |
entity |
Interface table entity (preset mode) |
org_id |
Operating Unit ID for multi-org tables |
ledger_id |
Ledger ID for GL interface |
target_table |
Full Oracle table name (custom mode) |
write_operation |
insert or upsert (MERGE) |
primary_key |
Primary key columns (required for upsert) |
column_mapping |
Map input columns to target columns |
batch_size |
Rows per batch (default: 1000) |
git clone https://github.com/keboola/component-wr-oracle-ebs
cd component-wr-oracle-ebs
docker-compose build
docker-compose run --rm devdocker-compose run --rm test