set up : directory
logon in DBA access  SYS@PWR

create or replace directory temp_dir as 'C:\temp'
/

grant read, write on directory temp_dir to SACHIN
/



This is just an example that i had from long back. Make your own judgement..


create table table1( f1 varchar2(100),
 f2 varchar2(100),
f3 varchar2(100)); 
 
data_file.txt:


1, aaaaaaa, zzzzzzz
2, bbbbbbbb, xxxxxxxxx
3, ccccccccc, yyyyyyy
4, dddddddd, wwwwwwwww
 
 
create or replace PROCEDURE load_example IS
  v_file   UTL_FILE.file_type;
  err_file UTL_FILE.file_type;
----set up the dir which is the same which is set up for TEMP
   v_dir    VARCHAR2(50) := 'TEMP';
  l_file   VARCHAR2(100) := 'data_file.txt';
  e_file   VARCHAR2(100) := 'err_file.txt';
  v_how    VARCHAR2(1) := 'r';
  v_text   VARCHAR2(2000);
  v_size   NUMBER := 32767;

  TYPE data_rec IS RECORD(
    field1 VARCHAR2(10),
    field2 VARCHAR2(100),
    field3 VARCHAR2(100),
    val    VARCHAR2(100),
    rst    VARCHAR2(2000),
    cnt    NUMBER);

  l data_rec;
BEGIN
  DBMS_OUTPUT.ENABLE(1000000);

  DBMS_APPLICATION_INFO.set_client_info('1');

  v_file   := UTL_FILE.fopen(v_dir, l_file, v_how, v_size);
  err_file := UTL_FILE.fopen(v_dir, e_file, 'w', v_size);

  BEGIN
    LOOP
      l     := NULL;
      l.cnt := 0;
    
      BEGIN
        UTL_FILE.get_line(v_file, v_text, v_size);
      EXCEPTION
        WHEN NO_DATA_FOUND THEN
          EXIT;
      END;
    
      v_text := REPLACE(REPLACE(REPLACE(v_text, CHR(13)), CHR(10)), CHR(9));
      l.rst  := v_text;
    
      WHILE LENGTH(l.rst) > 0 LOOP
        BEGIN
          l.cnt := l.cnt + 1;
          l.val := SUBSTR(l.rst, 1, INSTR(l.rst, ',', 1, 1) - 1);
          l.rst := SUBSTR(l.rst, INSTR(l.rst, ',', 1, 1) + 1);
        
          IF l.cnt = 1 THEN
            BEGIN
              l.field1 := l.val;
            EXCEPTION
              WHEN OTHERS THEN
                UTL_FILE.put_line(err_file,
                                  'Err while processing field1: ' || v_text || ':' ||
                                  SQLERRM);
                EXIT;
            END;
          ELSIF l.cnt = 2 THEN
            BEGIN
              l.field2 := l.val;
            EXCEPTION
              WHEN OTHERS THEN
                UTL_FILE.put_line(err_file,
                                  'Err while processing field2: ' || v_text || ':' ||
                                  SQLERRM);
                EXIT;
            END;
          ELSIF l.cnt = 3 THEN
            BEGIN
              l.field3 := l.val;
            EXCEPTION
              WHEN OTHERS THEN
                UTL_FILE.put_line(err_file,
                                  'Err while processing field3: ' || v_text || ':' ||
                                  SQLERRM);
                EXIT;
            END;
          END IF;
        
          IF INSTR(l.rst, ',', 1, 1) = 0 THEN
            BEGIN
              l.field3 := l.rst;
              EXIT;
            EXCEPTION
              WHEN OTHERS THEN
                UTL_FILE.put_line(err_file,
                                  'Err while processing field3: ' || v_text || ':' ||
                                  SQLERRM);
                EXIT;
            END;
          END IF;
        EXCEPTION
          WHEN OTHERS THEN
            UTL_FILE.put_line(err_file,
                              'Err while processing line: ' || v_text || ':' ||
                              SQLERRM);
            EXIT;
        END;
      END LOOP;
    
      l.field1 := UPPER(LTRIM(RTRIM(l.field1)));
      l.field2 := UPPER(LTRIM(RTRIM(l.field2)));
      l.field3 := UPPER(LTRIM(RTRIM(l.field3)));
    
      BEGIN
        INSERT INTO table1 VALUES (l.field1, l.field2, l.field3);
        
      EXCEPTION
        WHEN OTHERS THEN
          UTL_FILE.put_line(err_file,
                            'Err while inserting/updating: ' || l.field1 || ':' ||
                            l.field2 || ':' || l.field3 || ':' || SQLERRM);
      END;
    END LOOP;
  
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN
      UTL_FILE.put_line(err_file, 'Err : ' || SQLERRM);
  END;

  UTL_FILE.fclose(v_file); -- Close File
  UTL_FILE.fclose(err_file);
EXCEPTION
  WHEN UTL_FILE.invalid_path THEN
    DBMS_OUTPUT.put_line('Invalid Path');
    UTL_FILE.fclose(v_file); -- Close File
    UTL_FILE.fclose(err_file);
  WHEN UTL_FILE.invalid_mode THEN
    DBMS_OUTPUT.put_line('Invalid Mode');
    UTL_FILE.fclose(v_file); -- Close File
    UTL_FILE.fclose(err_file);
  WHEN UTL_FILE.write_error THEN
    DBMS_OUTPUT.put_line('Write Error');
    UTL_FILE.fclose(v_file); -- Close File
    UTL_FILE.fclose(err_file);
  WHEN UTL_FILE.invalid_operation THEN
    DBMS_OUTPUT.put_line('Invalid Operation');
    UTL_FILE.fclose(v_file); -- Close File
    UTL_FILE.fclose(err_file);
  WHEN OTHERS THEN
    DBMS_OUTPUT.put_line(SQLCODE || ': ' || SQLERRM);
    UTL_FILE.fclose(v_file); -- Close File
    UTL_FILE.fclose(err_file);
END load_example;