Relational engine
Connect Oracle to Excel, Sheets and AI
Oracle Database (Free, XE, Standard, Enterprise). The agent talks SQL*Net from inside your network so nothing is exposed inbound.
One connection, every surface
Where your Oracle data can go
Connect Oracle once and the same read-only connection feeds all of these — no second setup, no second copy of the data. 9 of 11 have a step-by-step guide.
Oracle to Excel
Microsoft Excel · Excel add-in
Pull live Oracle results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.
Read the guideOracle to Google Sheets
Sheets add-on
Run a saved Oracle query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.
Read the guideOracle MCP server
Claude, Cursor and MCP clients
Give an AI assistant read-only access to Oracle with the schema it needs to write correct SQL — no credentials in the chat.
Read the guideOracle REST API
HTTP endpoint
Publish a Oracle query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.
Read the guideOracle to Airtable
Automation platform
Sync Oracle rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.
Read the guideOracle to Baserow
Automation platform
Feed a Baserow table from Oracle over the REST endpoint — self-hosted or Baserow cloud.
Read the guideOracle to SeaTable
Automation platform
Keep a SeaTable base current with Oracle data without exporting a file or exposing the database.
Read the guideOracle to Smartsheet
Automation platform
Push Oracle results into a Smartsheet grid so plans and reports read from the source system, not last week's export.
Read the guideOracle to Anvil
Anvil Works · App platform
Back an Anvil Python app with Oracle through the REST endpoint instead of embedding database credentials in the app.
Read the guideOracle to Power BI
Power Query M
Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live Oracle results over HTTPS — no ODBC driver, no database port opened.
How Power BI works no Oracle walkthrough written yetOracle alerts and reports
Slack · Discord · Email · Webhook
Put a Oracle query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.
How alerts and reports work no Oracle walkthrough written yetHow it works
5 steps, no inbound firewall change
Install the Network Agent on a machine that can already reach the listener. Nothing is installed on the Oracle server itself.
Enter host and port, then either a service name (the modern Easy Connect form) or a SID, with a username and password.
Pick the owner schemas worth exposing — the agent lists them from ALL_USERS with the Oracle-supplied ones filtered out. It reads their tables and columns so the Query Builder can offer real names.
Write read-only SQL, or let Nova write it. Named binds use Oracle's own colon form and are bound by name, not by position.
Read the saved query from Excel, Sheets, Power BI, MCP or REST — and share it with someone who never sees the statement.
Feature deep-dive
What Oracle gives you
No client install, either style of connection
The usual first day with Oracle is spent on the client, not the query. That step is gone: the agent ships Oracle's managed driver, which is pure .NET.
- Nothing to install — no Instant Client, no ORACLE_HOME, no 32-bit-versus-64-bit mismatch to debug.
- Service name — becomes an Easy Connect string, host:port/service, which is what most modern instances want.
- SID — becomes a full TNS descriptor built for you, for the older instances that still identify that way.
- One or the other is required, and the connection test tells you which of the two Oracle rejected: ORA-12514 means it does not know that service, ORA-12505 means it does not know that SID, ORA-01017 means the password is wrong.
- A tnsnames.ora alias is not read. Give the host and port directly.
NUMBER is not a float
Oracle's NUMBER is the type most tools quietly get wrong, because a bare NUMBER has 38 digits of precision and no declared scale. Rounding it into a double is the normal shortcut and it silently loses cents on large values.
- A NUMBER with declared precision and scale keeps both — NUMBER(12,2) stays exact.
- A bare NUMBER with no declared scale is carried as text rather than squeezed into a floating-point type. Nothing is lost on the way out, and the receiving tool can decide what to do with it.
- DATE carries its time component, because in Oracle it always had one.
- TIMESTAMP WITH TIME ZONE is normalised to UTC, so two rows written in two offices compare correctly.
- CLOB and BLOB come through as text and bytes rather than being truncated to a preview.
Schema is the thing you pick, and the thing you write
Oracle uses the word database differently from every other engine here, which is worth being precise about. What you select during discovery is an owner schema, and it is that name — not an instance name — that appears in a cross-source query.
-- ora_erp is the connection, SALES is the Oracle owner schema
SELECT c.region, SUM(o.total) AS revenue
FROM ora_erp.sales.orders o
JOIN pg_crm.public.customers c ON c.id = o.customer_id
GROUP BY c.region
Shared by every database connector
True of every database connector
- Outbound only — the agent opens one encrypted connection out to Query Streams. No inbound port to forward, no VPN, no IP allowlist, nothing about your database exposed to the internet.
- Credentials stay put — the database username and password live on the machine you installed the agent on. Query Streams never receives them and cannot reach your database on its own.
- Read-only, enforced — one statement at a time, SELECT and friends only. A write is rejected on your own machine before it is ever sent to the server, rather than relying on a permission somebody remembered to set.
- Deploy as many agents as you like — one per site, region or cloud. Every data source they can see arrives in a single dropdown, so nobody has to know which agent hosts what.
What you get once a query is saved
- Share the capability, not the SQL — a colleague or an outside partner can run your query and change its filters without ever seeing the statement behind it.
- Filters from either direction — declare them yourself as @variables, or let the connector spot the literal values already sitting in your WHERE clause and offer those as dropdowns.
- Read it from anywhere — Microsoft Excel, Google Sheets, Power BI, the REST API, AI assistants over MCP, the Query Builder and Nova all read the same saved query.
- Run several at once — five saved queries into five worksheet tabs, streamed concurrently, however large the results.
- Join it to anything else you have connected — another database, a business API, or a folder of files, in one read-only statement.
Cross-source SQL
Join Oracle to the rest of your data
One statement can span Oracle and your other connections at once. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.
3 connections · 3 agents
One statement
-- nothing copied, nothing merged, nothing scheduled
SELECT c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
FROM ora_erp.sales.orders1 f
JOIN pg_crm.public.customers2 c ON c.id = f.customer_id
JOIN billing.stripe.invoices3 i ON i.customer = c.stripe_id
GROUP BY c.region
ORDER BY invoiced DESC;
The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. How federated queries work
Connection details
What Oracle needs
- Port
- 1521 by default, any port accepted
- Identifies as
- A service name (Easy Connect) or a SID (a TNS descriptor built for you). One of the two is required
- Credentials
- An Oracle username and password, held on the agent. Query Streams never receives them
- Driver
- Oracle.ManagedDataAccess.Core 23.5.1, bundled — fully managed, so no Instant Client and no ORACLE_HOME
- Encryption
- The agent-to-Query Streams leg is TLS. The agent-to-listener hop uses your own network's arrangements — there is no TLS switch in the connector, so put the agent beside the database
- Schema
- Chosen from ALL_USERS during discovery, with Oracle's own schemas filtered out. The session is set to it before each query
- Parameters
- Oracle's colon form, bound by name. Lists are not accepted as a single bind
- Pooling
- On, one to ten connections, recycled every five minutes
- Timeouts
- 30 seconds to connect, 30 seconds per statement while streaming
- Read-only
- Enforced on your own machine before the statement is sent to the listener
Only SELECT and WITH reach the database on this connector. The check runs on your own machine, before anything is sent, so a mistyped UPDATE never travels the wire — and it does not depend on somebody having remembered to create a read-only Oracle account, though doing so as well is still good practice.
In a cross-source query the middle part of a three-part reference is the Oracle owner schema, not an instance or service name. A connection called ora_erp reading the SALES schema is written ora_erp.sales.orders.
Vendor documentation: www.oracle.com
FAQ
Questions about Oracle
Which tools can read Oracle data through Query Streams?
All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the database once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.
Do I have to open a firewall port to my Oracle database?
No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the database keeps its existing firewall rules.
Can Query Streams change data in Oracle?
No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.
What does Query Streams need to connect to Oracle?
A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the database. Port: 1521 by default, any port accepted. Identifies as: A service name (Easy Connect) or a SID (a TNS descriptor built for you). One of the two is required. Credentials: An Oracle username and password, held on the agent. Query Streams never receives them. Driver: Oracle.ManagedDataAccess.Core 23.5.1, bundled — fully managed, so no Instant Client and no ORACLE_HOME.
Can I join Oracle to another database in the same query?
Yes — that is a federated query. One statement can reference Oracle and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.
Put Oracle where the work happens
Install the agent, point it at your database, and pick a destination.
Read-only Outbound only Credentials stay on the agent

