---
title: "Oracle Database Integration"
description: "Connect AI agents to Oracle Database in Thin mode (no Instant Client). Agents run SQL and PL/SQL, do CRUD without SQL, and inspect schemas as governed steps in a flow."
url: https://flowrunner.ai/integrations/oracle-database
date_modified: 2026-08-01T02:40:32-07:00
---

# Oracle Database

[Database](https://flowrunner.ai/integrations/category/databases-warehouses)

Connect AI agents to Oracle Database in Thin mode (no Instant Client). Agents run SQL and PL/SQL, do CRUD without SQL, and inspect schemas as governed steps in a flow.

[Verified](https://flowrunner.ai/integrations/verified "What does verified mean?") · 9 actions · Basic auth · available

[Oracle Database website](https://oracle.com/) · [Platform Documentation](https://docs.oracle.com/en/database/) · Capability data verified 2026-08-12

1.  A flow needs to call a stored procedure and act on its result
2.  Agent runs Execute PL/SQL Block and captures the OUT bind values
3.  Agent reads the returned values into flow variables
4.  Agent evaluates the result against the expected range
5.  Agent runs Execute Statement to record the outcome with autoCommit
6.  The process owner receives the result and status via Slack
7.  Any Update Rows or Delete Rows against a production schema pauses for approval

## What This Integration Enables

Agents run SELECT queries, run INSERT, UPDATE, DELETE, and DDL statements, and execute anonymous PL/SQL blocks that call procedures and functions and capture OUT binds. They also do CRUD without SQL and inspect structure with Describe Table and List Tables. One Oracle-specific detail matters for casing: Oracle folds unquoted identifiers to uppercase, so List Tables and Describe Table return names in their stored (usually uppercase) form, and a Data object should key columns to match, for example `{"EMAIL":"ada@example.com"}`. The connect-per-call model keeps each step isolated.

### Without FlowRunner

**Instant Client friction**: Reaching Oracle from automation needs native drivers and client setup

**Procedures locked in the DB**: Business logic in PL/SQL can only be called from inside the database

**Unbounded row writes**: An UPDATE or DELETE with no WHERE clause rewrites the whole table

### With FlowRunner

**Driverless Thin-mode access**: Agents connect over TCP with no Instant Client and no wallet

**Procedures callable in a flow**: Execute PL/SQL Block calls procedures and reads back OUT binds

**Writes require a WHERE**: Update Rows and Delete Rows refuse to run without a WHERE clause

## Use Case Scenarios

### Calling business logic in PL/SQL

A pricing or eligibility rule already lives in a PL/SQL procedure. The agent calls Execute PL/SQL Block, passes the inputs as binds, and reads the OUT binds back into the flow, so the same logic the database enforces now drives an automated step. No logic is duplicated outside Oracle.

### Reading a found set for downstream steps

The agent calls Select Rows with a bound WHERE clause and a `FETCH FIRST n ROWS ONLY` limit to pull the records that need attention, then passes them to the next connector in the flow. Because the WHERE values are supplied as Where Binds, no untrusted input is concatenated into SQL.

### Corrective write with a human gate

The agent identifies records that need a corrective update in a production schema. Before it runs Update Rows, it does not act on its own. It routes the proposed change for approval and applies it only after a person confirms.

## Human-in-Loop Highlight

Against an Oracle system of record, a bulk write is exactly the action you want a person to see before it runs. FlowRunner's answer is human-in-the-loop, an execution pattern where the agent pauses on its own, assembles the context and the choices, routes to a human on their preferred channel, and resumes the moment they respond. When an Update Rows or Delete Rows targets a schema flagged as production, or would affect more rows than the configured threshold, the agent pauses before executing and asks through Slack: "This Update Rows on `HR.EMPLOYEES` matches 318 rows. Here is the WHERE clause and a sample. Approve, edit the filter, or cancel?" The write runs only after a person confirms, with the approver and timestamp captured in the run log. A connector can run any SQL or PL/SQL; an orchestration layer knows which statements should stop and ask.

Agent processes routinely

Detects exception requiring judgment

Clear match Continues automatically

Ambiguous Routes to human via Slack

Human decides

Agent resumes with decision

## Agent Capabilities

9 actions

### SQL

3

-   **Execute Query** Runs a SELECT statement with \`:name\` or \`:1, :2\` bind placeholders and returns rows as objects, the row count, and column names, with an optional Max Rows cap. Bind every value; never concatenate input into SQL.
-   **Execute Statement** Runs an INSERT, UPDATE, DELETE, or DDL statement with autoCommit and returns the rows affected. Use it for intentional writes, including deliberate unconditional ones.
-   **Execute PL/SQL Block** Runs an anonymous \`BEGIN ... END;\` block and captures OUT bind values, so an agent can call a stored procedure or function and read back its results.

### Rows

4

-   **Select Rows** Reads rows without writing SQL, with column selection, a bound WHERE clause, ordering, and a \`FETCH FIRST n ROWS ONLY\` limit.
-   **Insert Row** Inserts one row from a JSON object, with values bound as parameters.
-   **Update Rows** Updates rows matching a non-empty WHERE clause and returns the rows affected. A WHERE clause is required to prevent a full-table write.
-   **Delete Rows** Deletes rows matching a non-empty WHERE clause and returns the rows affected. A WHERE clause is required to prevent a full-table delete.

### Schema

2

-   **Describe Table** Returns each column name, data type, nullability, and length from \`USER\_TAB\_COLUMNS\`, so an agent can inspect a table before reading or writing it.
-   **List Tables** Lists all tables owned by the connected user from \`USER\_TABLES\`, for schema discovery.

## Frequently Asked Questions

### What can FlowRunner do with Oracle Database?

FlowRunner agents can run Execute Query, Execute Statement, and Execute PL/SQL Block in Oracle Database, plus 6 more actions.

### Does connecting Oracle Database to FlowRunner require OAuth?

No. Oracle Database connects to FlowRunner with basic authentication (a username and password), no OAuth flow required.

### Can Oracle Database trigger a FlowRunner workflow automatically?

Oracle Database doesn't currently expose triggers in FlowRunner. It connects as an action step inside workflows started by another trigger.

**Work at Oracle Database?** This integration exposes Oracle Database to AI agents on every FlowRunner plan, including through MCP, at no cost to you. [See what FlowRunner offers integration partners](https://flowrunner.ai/integrations/partners), including how to keep this page current.

---
Markdown version of https://flowrunner.ai/integrations/oracle-database. Site index: https://flowrunner.ai/llms.txt
