Мне кажется, что на самом деле SQL * Loader не может обработать ваш файл из-за третьего поля, которое: может содержать разделитель, не заключено в кавычки и имеет переменную длину. Вместо этого, если предоставленные вами данные являются точным примером, я могу предоставить пример обходного решения. Сначала создайте таблицу с одним столбцом VARCHAR2, длина которого равна максимальной длине любой строки в вашем файле. Затем просто загрузите весь файл в эту таблицу. Оттуда вы можете извлечь каждый столбец с помощью запроса, например:
with CTE as
(select 'ABC|1234567|STR 9 R 25|98734959,32|28.12.2011' as CTETXT
from dual
union all
select 'DE4|2346543|WE| 454|956584,84|28.11.2011' from dual)
select substr(CTETXT, 1, instr(CTETXT, '|') - 1) as COL1
,substr(CTETXT
,instr(CTETXT, '|', 1, 1) + 1
,instr(CTETXT, '|', 1, 2) - instr(CTETXT, '|', 1, 1) - 1)
as COL2
,substr(CTETXT
,instr(CTETXT, '|', 1, 2) + 1
,instr(CTETXT, '|', -1, 1) - instr(CTETXT, '|', 1, 2) - 1)
as COL3
,substr(CTETXT, instr(CTETXT, '|', -1, 1) + 1) as COL4
from CTE
Он не идеален (хотя он может быть адаптирован к SQL * Loader), но потребует немного работы, если у вас есть больше столбцов или если ваше третье поле не такое, как я думаю. Но это начало.