Oracle: importer le fichier CSV

j'ai cherché pendant un certain temps maintenant mais ne semble pas trouver de réponses alors voici...

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 une recherche pour un autre usage.

il s'agit en fait d'une solution de contournement sur laquelle je travaille puisque le fait d'utiliser la clause IN avec plus de 1000 valeurs n'est pas possible.

Comment est-ce fait en utilisant SQLPLUS?

Merci pour votre temps! :)

23
demandé sur Vadzim 2011-06-01 13:19:05

6 réponses

chargeur SQL aide à charger les fichiers csv dans les tables: SQL*Loader

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

20
répondu Abi 2011-06-01 09:27:25

une autre solution que vous pouvez utiliser est SQL Developer.

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

il suffit d'ouvrir la vue de la table, puis:

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

vous avez l'option de demander à SQL Developer de faire les inserts pour vous, de créer un script sql insert, ou de créer les données pour un SQL Loader script (n'ont pas essayé cette option moi-même).

bien sûr tout cela est discutable si vous ne pouvez utiliser que la ligne de commande, mais si vous êtes capable de le tester avec SQL Developer localement, 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
répondu Clarkey 2012-09-12 15:10:42

Une autre solution est d'utiliser une table externe: http://www.orafaq.com/node/848

utilisez ceci quand vous devez faire cette importation très souvent et très rapidement.

5
répondu TTT 2011-06-01 19:43:01

SQL Loader est le chemin à parcourir. J'ai récemment chargé ma table à partir d'un fichier csv,nouveau à ce concept,voudrait 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

    )

placer le fichier de contrôle et csv au même endroit sur le serveur. Recherchez le sqlldr exe et invoce.

sqlldr userid/password@DBname de contrôle= Ex : sqlldr abc/xyz@ora contrôle=charge.ctl

j'Espère que ça aide.

4
répondu arjun gaur 2016-06-01 10:53:44

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

3
répondu Michael McLaughlin 2012-11-17 18:59:30

Oracle 18c vous pouvez utiliser Inline Tables Externes:

inline external tables permet la définition runtime d'une table externe dans le cadre d'un énoncé SQL, sans créer la table externe comme objet persistant dans le dictionnaire de données.

avec les tables externes inline, la même syntaxe qui est utilisée pour créer une table externe avec une instruction CREATE TABLE peut être utilisée dans une instruction SELECT à l'exécution. Spécifier tables externes inline 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 jointures, agrégation, et ainsi de suite.

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;
1
répondu Lukasz Szozda 2018-03-02 21:31:32