Learn Oracle SQL*Loader — Bulk Data Loading Made Easy
SQL*Loader (the sqlldr command) is
Oracle's heavy-duty bulk-load utility — the right tool when you need
to move millions of rows from flat files (CSV, fixed-width, JSON,
etc.) into Oracle tables. This free tutorial covers control files,
conventional vs direct path loads, performance tuning, and the
gotchas that every DBA has to learn the hard way.
Each topic builds on a realistic example: a control file, a sample
data file, the sqlldr invocation, and the resulting
log. Use the sidebar to jump to a specific feature, or work through
the curriculum in order from Introduction through to
External Tables.
What you'll learn about Oracle SQL*Loader
- The sqlldr command line and control-file syntax
- Conventional path vs direct path loads — when to use each
- INSERT / APPEND / REPLACE / TRUNCATE load modes
- Delimited, fixed-width, and date/timestamp parsing
- BAD, DISCARD, and log file diagnostics
- WHEN clauses, multi-table loads, and SEQUENCE generation
- External tables as the modern alternative to SQL*Loader
Common use cases
One-time data migrations
Loading historical data from a legacy system into Oracle when the source is a flat-file dump (CSV, TSV, or fixed-width). SQL*Loader handles millions of rows in a single sqlldr invocation and gives you per-row error reporting.
Nightly ETL drops
A common pattern: an upstream system writes a CSV to a shared directory each night; a cron job triggers sqlldr to load it into a staging table, which a PL/SQL package then transforms into the production schema.
Loading LOBs and large text blobs
SQL*Loader is the most reliable way to bulk-load CLOB/BLOB content into Oracle when each row references an external file. Direct path mode delivers the throughput external table loads cannot match.