Feature Request: Full Oracle OUT / IN OUT Bind Support in Oracle Node

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:

  1. Read file row

  2. Call stored procedure with row values as IN parameters

  3. Procedure performs DML (INSERT/UPDATE/MERGE)

  4. 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

  • outBinds in 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 FUNCTION workaround 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:

  1. Allow defining parameters as:

    • IN

    • OUT

    • IN OUT

  2. Internally map them to:

    • oracledb.BIND_IN

    • oracledb.BIND_OUT

    • oracledb.BIND_INOUT

  3. Return result.outBinds as 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.