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! :)
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.
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.
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.
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.
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.
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;