2017-01-24 4 views
0

Kann mir jemand mit plsql gespeicherte Prozedur beim Importieren einer .CSV Datei in eine Oracle-Tabelle helfen? Wollte eine Prozedur erstellen, die den Dateinamen und den Tabellennamen akzeptiert.CSV in Oracle-Datenbank importieren

Hinweis: ich UTF-8-Dateiformat bin mit

+0

Ist die Datei gewähren? –

+0

Es ist nur auf dem Desktop. – vasanti

Antwort

0

Sie haben ein Verzeichnis zu erstellen, und es in den Ordner verweisen, in dem Sie die Datei haben. (Sie benötigen die Berechtigungen, um das zu erstellen)

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

Aber ich habe UTF8 Dateityp – vasanti

+0

Und was ist das Problem, basierend auf meinem Code? –

1

Eine PL/SQL-Prozedur, die in der Datenbank gespeichert ist, kann nicht auf Ihrem Desktop ausgeführt werden. Sie können

  • Verwendung SQL*Loader Dienstprogramm für diesen Zweck
  • schreiben ein Programm, das die Datei und Einfügen von Daten in Ihrer Tabelle
  • senden Sie die Datei an einen Ort lesen und analysieren, die durch die Datenbank zugegriffen werden kann und Verwenden Sie z external table oder eine Prozedur schreiben, die Datei (wie get_file in einen der Antworten)
0

Ich denke, die einfach die Art und Weise unter Verwendung von externen Tabellen zu lesen. Dies ist das Objekt, das wie eine Tabelle behandelt wird, aber er liest Daten aus einer Datei. Um dies zu erreichen, brauchen Sie das Privileg, JEDES VERZEICHNIS ZU ERSTELLEN. Also zuerst directort erstellen:

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

oder anderes Pfadverzeichnis auf dem Server. Als nächstes müssen Sie es

GRANT READ, WRITE ON DIRECTORY imp_data TO PUBLIC; 

jetzt der beste Teil auf dem Datenbank-Server (oder zugänglich zu ihm), oder auf einem Desktop :)

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