2015-10-11 3 views
0

Я новичок в оракуле.Новичок в оракуле пытается прочитать текстовый файл

Я пытался читать текстовый файл и вставить свои данные в UTL_FILE, но не в состоянии сделать это, как я не понимаю, следующие вещи:

Comma1 := INSTR(f_line, ',' ,1 , 1); 
Comma2 := INSTR(f_line, ',' ,1 , 2); 
Comma3 := INSTR(f_line, ',' ,1 , 3); 
Comma4 := INSTR(f_line, ',' ,1 , 4); 
Comma5 := INSTR(f_line, ',' ,1 , 5); 
f_empno := to_number(SUBSTR(f_line, 1, Comma1-1)); 
f_ename := SUBSTR(f_line, Comma1+1, Comma2-Comma1-1); 
f_job := SUBSTR(f_line, comma2+1, Comma3-Comma2-1); 
f_mgr := to_number(SUBSTR(f_line, comma3+1, Comma4-Comma3-1)); 
f_hiredate := to_date(SUBSTR(f_line, comma4+1, Comma5-Comma4-1),'dd-mon-yyyy'); 
f_sal := to_number(SUBSTR(f_line, comma5+1),'99999'); 
dbms_output.put_line(f_empno ||' '|| f_ename || ' ' || f_job || ' ' || f_mgr || ' ' || f_hiredate || ' ' || f_sal); 
insert into emp12 VALUES (f_empno,f_ename,f_job,f_mgr,f_hiredate,f_sal); 
+1

Вы не поняли вопрос. Что ты не понимаешь? Пожалуйста, будьте немного более конкретными в своем вопросе. –

+0

Код, который вы показали, вызывает несколько функций Oracle ('INSTR',' TO_NUMBER', 'SUBSTR',' TO_DATE') для извлечения данных из переменной 'f_line'. Документацию Oracle для функций [можно найти здесь] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions001.htm#i88893). Удачи. –

+0

Похоже, вы пытаетесь прочитать файл CSV. Для этого есть несколько решений, не требующих вручную отредактировать часть CSV-декодирования. Один из них - использовать внешнюю таблицу. Другим является использование соответствующего пакета в библиотеке PL/SQL Alexandria. –

ответ

-1

Это хороший простой пример кода для чтения данные из текстового файла, и его гораздо проще, чем то, что вы вывесили первоначально - http://nimishgarg.blogspot.co.il/2013/04/load-csv-file-in-oracle-using-plsql.html

Вот соответствующие фрагменты кода из ссылки прикрепленного - Выполнить все эти команды, чтобы прочитать файл EMP_DEPT.CSV из каталога e: \ mycsv \ в таблицу emp_dept для пользователя scott (cha Нге каждый из этих параметров, чтобы соответствовать ваш дизайн)

// 1. Во-первых, создать объект каталога таким образом оракул может получить доступ к расположению файла

create or replace directory MYCSV as 'e:\mycsv\'; 

// 2. Предоставление пользователю чтение из привилегий файлов в этом каталоге

grant read, write on directory MYCSV to scott; 

// 3. Создать таблицу в той же структуре, что и строки в файле

CREATE TABLE EMP_DEPT 
    (
    EMPNO NUMBER(4), 
    ENAME VARCHAR2(10), 
    SAL NUMBER(7,2), 
    DNAME VARCHAR2(14) 
); 

// 4. Run this procedure after making the following changes - 
// a. Change the variables to match the columns in your destination table 
// b. Change the UTL.FILE.FOPEN command to match the directory and file name in your case. 
// c. Change every REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 1); to match the variable you want to assign. 
// 5. Go for it. 
DECLARE 
    F UTL_FILE.FILE_TYPE; 
    V_LINE VARCHAR2 (1000); 
    V_EMPNO NUMBER(4); 
    V_ENAME VARCHAR2(10); 
    V_SAL NUMBER(7,2); 
    V_DNAME VARCHAR2(14); 
    BEGIN 
    F := UTL_FILE.FOPEN ('MYCSV', 'EMP_DEPT.CSV', 'R'); 
    IF UTL_FILE.IS_OPEN(F) THEN 
     LOOP 
     BEGIN 
      UTL_FILE.GET_LINE(F, V_LINE, 1000); 
      IF V_LINE IS NULL THEN 
      EXIT; 
      END IF; 
      V_EMPNO := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 1); 
      V_ENAME := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 2); 
      V_SAL := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 3); 
      V_DNAME := REGEXP_SUBSTR(V_LINE, '[^,]+', 1, 4); 
      INSERT INTO EMP_DEPT VALUES(V_EMPNO, V_ENAME, V_SAL, V_DNAME); 
      COMMIT; 
     EXCEPTION 
     WHEN NO_DATA_FOUND THEN 
      EXIT; 
     END; 
     END LOOP; 
    END IF; 
    UTL_FILE.FCLOSE(F); 
    END; 
/

Удачи.

+0

@YaronIdan Я хочу сделать процедуру, а не анонимный блок. Скажите, пожалуйста, как сделать процедуру, которая будет считывать данные из текстового файла и вставлять их в таблицу. – Abhinav

+0

Просто измените оператор DECLARE, который открывает анонимный блок, чтобы «СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ПРОЦЕДУРА IS" –

Смежные вопросы