Summary
The current Oracle nodes in n8n (both the standard Oracle node and @rempel/n8n-nodes-oracle) do not reliably support OUTand IN OUT bind parameters when executing PL/SQL stored procedures.
This significantly limits Oracle integration capabilities and makes it difficult to migrate ETL workflows (e.g., from Talend Open Studio) to n8n.
Full support for Oracle OUT and IN OUT binds is essential for enterprise-grade database automation.
Business Context
We are currently migrating ETL workflows from Talend Open Studio to n8n.
A typical pattern in enterprise Oracle environments is:
-
Read file row
-
Call stored procedure with row values as
INparameters -
Procedure performs DML (INSERT/UPDATE/MERGE)
-
Procedure returns:
-
status
-
error message (if any)
-
generated IDs
-
additional processing results
-
The workflow then decides:
-
Write error to file
-
Continue processing
-
Route to another system
-
Trigger notifications
This pattern relies heavily on reliable OUT / IN OUT parameter support.
Without it, n8n cannot fully replace traditional ETL tools.
Technical Problem
Oracle’s official driver (node-oracledb) fully supports:
-
BIND_IN -
BIND_OUT -
BIND_INOUT -
outBindsin result object
However, in current n8n Oracle nodes:
Observed behavior
-
OUT parameters are not returned in the node output
-
IN OUT parameters cause:
PLS-00363: expression cannot be used as assignment target
-
Using
WITH FUNCTIONworkaround works only for non-DML procedures -
DML procedures fail with:
ORA-14551: cannot perform a DML operation inside a query
-
Some nodes return only:
[{ "success": true }]without returning
outBinds
Minimal reproducible example
Stored procedure:
PROCEDURE test_proc(
p_in IN VARCHAR2,
p_out OUT VARCHAR2
) IS
BEGIN
p_out := 'OK';
END;
Expected behavior in n8n:
BEGIN
test_proc(:p_in, :p_out);
END;
Parameters:
-
p_in → IN
-
p_out → OUT
Expected output:
{
"p_out": "OK"
}
Actual behavior:
-
Either error
-
Or no OUT value returned
-
Or only
{ "success": true }
Why This Matters
Without proper OUT bind support:
-
Oracle stored procedures cannot be used in a row-based ETL pattern
-
Complex enterprise integrations are blocked
-
Migration from Talend / ODI / SSIS becomes impractical
-
Workarounds (JSON wrapper functions, result tables, microservices) are required
These workarounds:
-
Add architectural complexity
-
Reduce clarity
-
Are not suitable for low-code environments
Expected Enhancement
The Oracle node should:
-
Allow defining parameters as:
-
IN
-
OUT
-
IN OUT
-
-
Internally map them to:
-
oracledb.BIND_IN -
oracledb.BIND_OUT -
oracledb.BIND_INOUT
-
-
Return
result.outBindsas part of the node output JSON.
Example expected output:
{
"outBinds": {
"p_out": "OK"
}
}
or directly flattened:
{
"p_out": "OK"
}
Enterprise Impact
For organizations running Oracle-heavy systems:
-
OUT binds are not an edge case.
-
They are standard integration practice.
-
Lack of support prevents serious ETL replacement.
If n8n aims to position itself as an enterprise workflow automation platform, full Oracle bind support is essential.
Willingness to Support
We are happy to:
-
Provide further reproducible examples
-
Test beta implementations
-
Validate fixes in enterprise scenarios
Thank you for considering this enhancement.
If you’d like, I can also provide:
-
A shorter GitHub-style version
-
A more direct enterprise-support version
-
A technical deep-dive version aimed at the core maintainers
Just tell me where you plan to submit it.