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