Skip to main content

Class: SprocOutputBuilder<TOut>

Defined in: src/procedure/StoredProcedureBuilder.ts:83

Intermediate execution builder returned after defining output parameters with .output<TOut>().

Provides strongly-typed execution methods (query, queryMultiple, reader, run) that return both tabular query results and strongly-typed output parameters.

Type Parameters​

Type ParameterDescription
TOut extends objectInterface representing expected OUTPUT or INOUT parameters.

Constructors​

Constructor​

new SprocOutputBuilder<TOut>(builder, outputNames): SprocOutputBuilder<TOut>

Defined in: src/procedure/StoredProcedureBuilder.ts:84

Parameters​

ParameterType
builderStoredProcedureBuilder
outputNameskeyof TOut[]

Returns​

SprocOutputBuilder<TOut>

Methods​

query()​

query<TRecord>(): Promise<SprocResult<TRecord[], TOut>>

Defined in: src/procedure/StoredProcedureBuilder.ts:122

Executes the stored procedure and returns a single tabular record set together with typed OUTPUT parameters.

Type Parameters​

Type ParameterDefault typeDescription
TRecordunknownThe type of each row in the returned tabular record set.

Returns​

Promise<SprocResult<TRecord[], TOut>>

A Promise resolving to SprocResult with records: TRecord[] and out: TOut.

Usecase​

Ideal for search or report procedures that return matched rows alongside aggregated metrics (e.g. TotalCount, MaxScore).

Example​

SQL Server (MSSQL):

const { records, out } = await context.procedure('usp_SearchUsers')
.input({ SearchTerm: 'Alice', Page: 1, PageSize: 20 })
.output<{ TotalCount: number }>()
.query<User>();

MySQL:

const { records, out } = await context.procedure('sp_search_users')
.input({ p_search: 'Alice', p_limit: 20 })
.output<{ p_total_count: number }>()
.query<User>();

PostgreSQL:

const { records, out } = await context.procedure('fn_search_users')
.input({ search_term: 'Alice' })
.output<{ out_total: number }>()
.query<User>();

queryMultiple()​

queryMultiple<T>(): Promise<SprocResult<T, TOut>>

Defined in: src/procedure/StoredProcedureBuilder.ts:157

Executes the stored procedure and returns multiple tabular record sets alongside typed OUTPUT parameters.

Type Parameters​

Type ParameterDescription
T extends unknown[]Tuple defining the types of each returned record set, e.g. [OrderHeader[], OrderItem[]].

Returns​

Promise<SprocResult<T, TOut>>

A Promise resolving to SprocResult with records: T and out: TOut.

Usecase​

Fetching complex hierarchical or composite datasets (e.g. Order Header + Order Items + Shipping Info) in a single database round-trip.

Example​

SQL Server (MSSQL):

const { records: [orders, items], out } = await context.procedure('usp_GetOrderDetails')
.input({ OrderId: 1001 })
.output<{ OrderStatus: string; TotalAmount: number }>()
.queryMultiple<[OrderHeader[], OrderItem[]]>();

MySQL:

const { records: [orders, items], out } = await context.procedure('sp_get_order_details')
.input({ p_order_id: 1001 })
.output<{ p_status: string }>()
.queryMultiple<[OrderHeader[], OrderItem[]]>();

reader()​

reader(): Promise<MultipleResultsReader<TOut>>

Defined in: src/procedure/StoredProcedureBuilder.ts:185

Executes the stored procedure and returns a sequential MultipleResultsReader along with typed output parameters.

Returns​

Promise<MultipleResultsReader<TOut>>

A Promise resolving to MultipleResultsReader<TOut>.

Usecase​

Consuming multiple tables sequentially using a forward-only reader pattern (similar to Dapper GridReader).

Example​

const reader = await context.procedure('usp_GetAnalyticsReport')
.input({ Year: 2026, Quarter: 1 })
.output<{ ReportGeneratedAt: Date }>()
.reader();

const summary = reader.readFirst<RevenueSummary>();
const monthly = reader.read<MonthlyBreakdown>();
const topBuyers = reader.read<CustomerRanking>();

run()​

run(): Promise<SprocResult<void, TOut>>

Defined in: src/procedure/StoredProcedureBuilder.ts:229

Executes the stored procedure with no tabular result set, returning only typed output parameters and return values.

Returns​

Promise<SprocResult<void, TOut>>

A Promise resolving to SprocResult<void, TOut>.

Usecase​

Executing mutating business actions, generating sequential invoice codes, or performing transactional fund transfers.

Example​

SQL Server (MSSQL):

const { out, returnValue } = await context.procedure('usp_CreateInvoice')
.input({ CustomerId: 42, SubTotal: 150.00 })
.output<{ InvoiceNumber: string; GeneratedId: number }>()
.run();

console.log('Invoice:', out.InvoiceNumber); // e.g. "INV-2026-0042"
console.log('ID:', out.GeneratedId);

PostgreSQL:

const { out } = await context.procedure('sp_create_invoice')
.input({ p_customer_id: 42, p_subtotal: 150.00 })
.output<{ p_invoice_no: string; p_new_id: number }>()
.run();

MySQL:

const { out } = await context.procedure('sp_create_invoice')
.input({ customer_id: 42, amount: 150.00 })
.output<{ out_invoice_no: string; out_id: number }>()
.run();