Saludos y gracias por interesarte en ayudarme.
DECLARE
e_Cnomarch Varchar2(100);
v_Ccadena Varchar2(100);
v_Ccodtar Varchar2(3);
v_Cprod Varchar2(10);
v_Csep Varchar2(1);
v_Cuso Varchar2(3);
v_Cpos Number(3);
v_Nprod Number(9, 2);
v_Ncoma Number(3);
v_Npunto Number(3);
Archivo Utl_File.File_Type;
Begin
e_Cnomarch := 'emas delimitado.csv';
Archivo := Utl_File.Fopen('ARCH_ACTIVOS', e_Cnomarch, 'R');
Loop
Begin
Utl_File.Get_Line(Archivo, v_Ccadena);
Exception
When No_Data_Found Then
Exit;
End;
-- identificar separador
v_Cpos := Instr(v_Ccadena, ',');
If (v_Cpos = 0 Or v_Cpos > 4) Then
-- si no hay o está en otra posición por cualquier razón se busca el punto y coma
v_Cpos := Instr(v_Ccadena, ';');
If (v_Cpos = 0 Or v_Cpos > 4) Then
Raise_Application_Error(-20001, 'No se encuentra el separador de las columnas, debe ser coma o punto y coma');
Else
v_Csep := ';';
End If;
Else
v_Csep := ',';
End If;
v_Cpos := Instr(v_Ccadena, v_Csep);
v_Cuso := Trim(Substr(v_Ccadena, 1, v_Cpos - 1));
v_Ccadena := Substr(v_Ccadena, v_Cpos + 1);
v_Cpos := Instr(v_Ccadena, v_Csep);
v_Ccodtar := Trim(Substr(v_Ccadena, 1, v_Cpos - 1));
v_Ccadena := Substr(v_Ccadena, v_Cpos + 1);
v_Cprod := Trim(Replace(v_Ccadena, '"'));
-- conversión a número de los kilos, el proceso trata de detectar los caracteres númericos
v_Ncoma := Instr(v_Cprod, ',');
v_Npunto := Instr(v_Cprod, '.');
If (v_Ncoma > v_Npunto) Then
-- el separador es coma
v_Nprod := To_Number(v_Cprod, '999g999g999d99', 'nls_numeric_characters='',.''');
Else
v_Nprod := To_Number(v_Cprod, '999g999g999d99', 'nls_numeric_characters=''.,''');
End If;
End Loop;
Utl_File.Fclose(Archivo);
Commit;
EXCEPTION WHEN OTHERS THEN
raise_application_error(-20001, '<<<( ' || v_cprod || ' )>>> ' || SQLERRM);
End;
Había omitido algo importante, y es que el valor está siendo originalmente cargado desde un archivo plano, le hecho cantidad de pruebas para identificar si está cargando la cadena correctamente y parece que efectivamente está quedando almacenado '125.05' dentro de "v_Cpos".
Gracias nuevamente,