 <p>If there is a field that can be used which can indicate which table that file's data is intended for, you can do something like this using multiple <code>INFILE</code> satements. Let's say the first field is that indicator and it will not be loaded (define it as a FILLER so sqlldr will ignore it):</p> <pre><code>... INTO TABLE table1 WHEN (01) = 'TBL1' fields terminated by ',' optionally enclosed by '"' TRAILING NULLCOLS ( rec_skip filler POSITION(1), Col1 "TRIM(:Col1)", Col2 "TRIM(:Col2)" ) INTO TABLE table2 WHEN (01) = 'TBL2' fields terminated by ',' optionally enclosed by '"' TRAILING NULLCOLS ( rec_skip filler POSITION(1), Colx "TRIM(:Colx)", Coly "TRIM(:Coly)" ) INTO TABLE table3 WHEN (01) = 'TBL3' fields terminated by ',' optionally enclosed by '"' TRAILING NULLCOLS ( rec_skip filler POSITION(1), Colp "TRIM(:Colp)", Colq "TRIM(:Colq)" ) </code></pre> <p>So logically, each INTO table WHEN section handles each file. Not that flexible though and arguably harder to maintain. For ease of maintenance you may just want to have a control file for each file? If all files and tables are the same layout you could also load them all into the same staging table (with the indicator) for ease of loading, then split them out programatically into the separate tables afterwards. Pros of that method are faster and easier loading and more control over the splitting into the separate table part of the process. Just some other ideas. I have done each method, depends on the requirements and what you are able to change.</p>