---
id: plugins-database
title: "Database"
summary: "The 7 plugins in Database: Bulk insert, Routine call, Schema reader and 4 more."
audience: user
keywords: "DatabaseBulkInsert, DatabaseRoutineCall, DatabaseSchema, DatabaseQuery, DatabaseTransaction, DatabaseReader, DatabaseWriter"
---
# Database

Work with relational databases through a database link: SQL Server, PostgreSQL, Oracle, MySQL, MariaDB, Db2, Snowflake and ClickHouse. Row types are generated from the table or the query, so records arrive with typed fields.

| Need | Plugin |
|---|---|
| Run any SQL | **Sql query** |
| Read a table or view | **Table reader** |
| Insert, update, upsert or delete rows | **Table writer** |
| Load many rows fast | **Bulk insert** |
| Call a procedure or function | **Routine call** |
| Commit or roll back several steps together | **Sql transaction** |
| Read table and routine definitions | **Schema reader** |

Credentials live in the database link, not in the flow.

## Plugins

| Plugin | What it does | Pins |
|---|---|---|
| [Bulk insert](/documentation/plugins/database/database-bulk-insert) | Buffers incoming records and writes them to a database table with the database's bulk load mechanism (minimally logged, much faster than row-by-row inserts). Use it for high-volume ingestion, for example after a file decoder or a mapper that produces many records. | `Input`, `Continue` |
| [Routine call](/documentation/plugins/database/database-routine-call) | Calls a stored procedure or function on a database and emits its result: the return value, output parameters, or the rows of a table-valued / pipelined result. Input and output types are generated from the routine signature. Works inside a *Sql transaction* scope. | `Input`, `Output`, `Continue` |
| [Schema reader](/documentation/plugins/database/database-schema) | Reads the schema of database objects - tables, views, procedures and functions - and emits it as descriptors: columns with types, keys and foreign keys for tables and views, parameters for routines. Its main use is the branch of an **AI tool**, so the model can look up tables before it writes SQL; it also serves to document a database or drive generic flows. | `Input`, `Output` |
| [Sql query](/documentation/plugins/database/database-query) | Runs a parameterized SQL statement against a database link and emits the result rows as typed records (or as one dynamic result set). Parameter values are taken from the input record, the message metadata or the flow configuration. Works inside a *Sql transaction* scope. Use it for custom selects, joins and DML statements. | `Input`, `Output`, `NoData`, `Continue` |
| [Sql transaction](/documentation/plugins/database/database-transaction) | Runs everything connected to its `Output` pin inside one database transaction. If all downstream components finish without error the transaction is committed and `Continue` is called; if any of them throws, the transaction is rolled back and the error is raised to the caller. | `Input`, `Output`, `Continue` |
| [Table reader](/documentation/plugins/database/database-reader) | Selects the rows of one database table (or view) and emits them as typed records, one record per row. The row type is generated from the table definition. A `DbShapeRequest` input adds projection, filtering, sorting and paging. Use it to read reference data or to serve table data to an API. | `Input`, `Output`, `NoData`, `Continue` |
| [Table writer](/documentation/plugins/database/database-writer) | Inserts, updates, upserts or deletes one row in a database table for every input record. The record type is generated from the table definition. After an insert, database-generated values (identity, primary key, computed columns) are written back into the record. Works inside a *Sql transaction* scope. | `Input`, `Continue` |
