External tables are just temporary tables loaded with SQL*Loader.
The answer is really where does the file reside? If it is not on the database server, external table is probably not the solution, the database needs direct access to the file in order to load it.
Mark Geerlings
I agree that both of these approaches can work. I have also used both of them at different times. Neither one actually uses a query to get the job done. Johnsone's comment about where the data file is located, is very important.
There is a third option that can also be used to load data into Oracle tables, that is a PL\SQL procedure that uses the procedures and functions in UTL_FILE to read an ASCII file (on the server) then convert or transform the data if necessary and load it into one or more tables.
The answer is really where does the file reside? If it is not on the database server, external table is probably not the solution, the database needs direct access to the file in order to load it.