web-dev-qa-db-fra.com

Oracle: Importer un fichier CSV

Je cherche depuis un moment maintenant, mais je n'arrive pas à trouver de réponses, alors voilà ...

J'ai un fichier CSV que je veux importer dans une table dans Oracle (9i/10i).

Plus tard, je prévois d'utiliser cette table comme recherche pour une autre utilisation.

Il s'agit en fait d'une solution de contournement sur laquelle je travaille depuis le fait que l'interrogation à l'aide de la clause IN avec plus de 1000 valeurs n'est pas possible.

Comment cela se fait-il avec SQLPLUS?

Merci pour votre temps! :)

24
cr8ivecodesmith

SQL Loader permet de charger des fichiers csv dans des tables: SQL * Loader

Si vous ne voulez que sqlplus, cela devient un peu compliqué. Vous devez localiser votre script sqlloader et votre fichier csv, puis exécuter la commande sqlldr.

21
Abi

Une autre solution que vous pouvez utiliser est SQL Developer.

Avec lui, vous avez la possibilité d'importer à partir d'un fichier csv (d'autres fichiers délimités sont disponibles).

Ouvrez simplement la vue tableau, puis:

  • choisir des actions
  • importer des données
  • trouver votre dossier
  • choisissez vos options.

Vous avez la possibilité de demander à SQL Developer d'effectuer les insertions pour vous, de créer un script d'insertion SQL ou de créer les données d'un script SQL Loader (je n'ai pas essayé cette option moi-même).

Bien sûr, tout cela est théorique si vous ne pouvez utiliser que la ligne de commande, mais si vous pouvez le tester localement avec SQL Developer, vous pouvez toujours déployer les scripts d'insertion générés (par exemple).

Il suffit d'ajouter une autre option aux 2 réponses déjà très bonnes.

21
Clarkey

Une solution alternative utilise une table externe: http://www.orafaq.com/node/848

Utilisez-le lorsque vous devez effectuer cette importation très souvent et très rapidement.

5
TTT

SQL Loader est le chemin à parcourir. J'ai récemment chargé ma table à partir d'un fichier csv, nouveau dans ce concept, je voudrais partager un exemple.

LOAD DATA
    infile '/ipoapplication/utl_file/LBR_HE_Mar16.csv'
    REPLACE
    INTO TABLE LOAN_BALANCE_MASTER_INT
    fields terminated by ',' optionally enclosed by '"'
    (
    ACCOUNT_NO,
    CUSTOMER_NAME,
    LIMIT,
    REGION

    )

Placez le fichier de contrôle et csv au même emplacement sur le serveur. Localisez l'exe sqlldr et facturez-le.

sqlldr userid/passwd @ DBname control = Ex: sqlldr abc/xyz @ ora control = load.ctl

J'espère que ça aide.

4
arjun gaur

Quelqu'un m'a demandé de poster un lien vers le framework ! que j'ai présenté à Open World 2012. Ceci est le billet de blog complet qui montre comment concevoir une solution avec des tables externes.

3
Michael McLaughlin

De Oracle 18c vous pouvez utiliser Tables externes intégrées :

Les tables externes en ligne permettent la définition d'exécution d'une table externe dans le cadre d'une instruction SQL, sans créer la table externe en tant qu'objet persistant dans le dictionnaire de données.

Avec les tables externes en ligne, la même syntaxe que celle utilisée pour créer une table externe avec une instruction CREATE TABLE peut être utilisée dans une instruction SELECT au moment de l'exécution. Spécifiez les tables externes en ligne dans la clause FROM d'un bloc de requête. Les requêtes qui incluent des tables externes en ligne peuvent également inclure des tables régulières pour les jointures, l'agrégation, etc.

INSERT INTO target_table(time_id, prod_id, quantity_sold, amount_sold)
SELECT time_id, prod_id, quantity_sold, amount_sold
FROM   EXTERNAL (   
    (time_id        DATE NOT NULL,     
     prod_id        INTEGER NOT NULL,
     quantity_sold  NUMBER(10,2),
     amount_sold    NUMBER(10,2))     
    TYPE Oracle_LOADER     
    DEFAULT DIRECTORY data_dir1
    ACCESS PARAMETERS (
      RECORDS DELIMITED BY NEWLINE
      FIELDS TERMINATED BY '|')     
   LOCATION ('sales_9.csv') REJECT LIMIT UNLIMITED) sales_external;
2
Lukasz Szozda