2017-01-24 4 views
0

Может ли кто-нибудь помочь мне с хранимой процедурой plsql импорта файла .CSV в таблицу Oracle? Хотелось создать процедуру, которая будет принимать имя файла и имя таблицы.Импорт CSV в базу данных Oracle

Примечание: Я использую UTF-8 формат файла

+0

ли файл на сервере базы данных (или доступный для него), или на каком-то рабочем столе? –

+0

Это только на рабочем столе. – vasanti

ответ

0

Вы должны создать каталог, и указать его в папку, где у вас есть файл. (Вам нужны разрешения на создание, что)

create or replace procedure get_file (p_dir varchar2, p_file varchar2) 
is 
line varchar2(4000); 
v_file utl_file.file_type; 
begin 
    v_file := utl_file.fopen(p_dir,p_file,'R'); 
    loop 
     utl_file.get_line(v_file,line); 
     -- insert code here 
     dbms_output.put_line(line); 
    end loop; 
    exception when others then 
      -- The only way to know when we reach the end of the file is to get and exception 
      utl_file.fclose(v_file); 
end; 
+0

Но у меня есть тип файла UTF8 – vasanti

+0

И в чем проблема, основываясь на моем коде? –

1

Процедура PL/SQL, который хранится в базе данных не может работать на вашем рабочем столе. Вы можете

  • использование SQL*Loader утилита для этой цели
  • написать программу, которая будет читать и анализировать файл и вставить данные в таблице
  • отправить файл на место, которое можно получить доступ с помощью базы данных и использовать, например external table или написать некоторую процедуру, чтобы прочитать файл (например, get_file в одном из ответов)
0

Я думаю, что путь УПРОЩЕННЫЙ является использование внешних таблиц. Это объект, который обрабатывает как таблицу, но он читает данные из файла. Для достижения этой цели вам нужна привилегия CREATE ANY DIRECTORY. Так сначала создать directort: ​​

CREATE OR REPLACE DIRECTORY imp_data AS 'c:\tmp\'; 

или любой другой каталог на вашем сервере. Далее вам необходимо предоставить его

GRANT READ, WRITE ON DIRECTORY imp_data TO PUBLIC; 

теперь лучшая часть :)

CREATE TABLE imp_data (
    ID NUMBER(20), 
    NAME VARCHAR2(50), 
    CITY VARCHAR2(200) 
) 
ORGANIZATION EXTERNAL 
(TYPE ORACLE_LOADER --this is the read-file driver 
    DEFAULT DIRECTORY imp_data 
    ACCESS PARAMETERS 
    RECORDS DELIMITED BY NEWLINE 
    BADFILE 'bad' 
    LOGFILE 'log' 
    FIELDS TERMINATED BY ',' -- CSV terminate mark 
    (ID, NAME, CITY)) -- the order of the columns in the file 
    LOCATION ('dane.csv')) -- name of file 
PARALLEL 5 
REJECT LIMIT 200; -- numbers of bad row before break import 
Смежные вопросы