Para resover esto puedes determinar el contenido de los campos varchar entre comillas dobles en el fichero de datos y utilizar la sentencia
optionally enclosed by '"' en el fichero de control o lo definición de la tabla, por ejemplo
Código:
C:\Temp>more data.txt
1|"texto"
2|"texto|texto"
Código:
C:\Temp>more control.txt
load data
into table t1
fields terminated by "|" optionally enclosed by '"'
(id,data)
Código:
C:\Temp>sqlldr user/pass@sid control=control.txt data=data.txt
SQL*Loader: Release 10.2.0.1.0 - Production on Mon Aug 15 22:30:12 2011
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Commit point reached - logical record count 2
Código:
SQL> select * from t1;
ID DATA
---------- ------------------------------
1 texto
2 texto|texto
1. Ten en mente que deberás quitar el caracter de escapeo "\", de lo contrario será insertado con el resto del registro.
2. Las tablas externas del tipo ORACLE_LOADER utilizan el SQL*Loader para la carga de datos, es por eso que el comportamiento es el mismo.
Saludos