2009-12-23 8 views
7

J'ai un fichier CSV qui contient un ID et plusieurs autres colonnes. J'ai aussi une table en oracle où l'identifiant identifie une rangée. Comment puis-je remplacer au mieux les valeurs contenues dans la table avec les valeurs du fichier CSV tout en conservant les autres colonnes comme avant? Cela doit être fait avec des outils disponibles dans Oracle (scripts PL/SQL ou SQL), je ne peux pas utiliser un langage de script "réel" (Python, ...) ou un programme "réel".Mise à jour de la table Oracle avec les valeurs du fichier CSV

Merci, Regardez Thomas

Répondre

10

à des tables externes dans le doc Oracle. Vous pouvez copier le fichier csv sur la boîte de serveur Oracle et demander à Oracle de le présenter comme une table "normale" sur laquelle vous pouvez exécuter des requêtes.

Alors le problème devient juste un copier des données d'une table à une autre.

Les tables externes sont vraiment très utiles pour gérer des charges de données comme celle-ci.

+0

+1. * TABLE EXTERNE * est la clé. Vérifiez ici http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch11.htm#1007030 pour charger les données. – Guru

1

Une autre option est de lire dans la ligne par ligne fichier, analyser les champs dans la ligne en utilisant quelque chose comme regexp_replace, et mettre à jour les lignes appropriées. Vous pouvez analyser une chaîne délimitée par des virgules comme suit:

SELECT TRIM(REGEXP_REPLACE(strLine, '(.*),.*,.*', '\1')), 
     TRIM(REGEXP_REPLACE(strLine, '.*,(.*),.*', '\1')), 
     TRIM(REGEXP_REPLACE(strLine, '.*,.*,(.*)', '\1')) 
    INTO strID, strField1, strField2  FROM DUAL; 

Ceci est utile si votre site ne permet pas l'utilisation de tables externes.

Partagez et appréciez.

5

Le « standard » outil Oracle pour le chargement des fichiers de données CSV type dans la base de données est SQLLoader. Il est normalement utilisé pour insérer des enregistrements, mais le fichier de contrôle peut être configuré pour exécuter une mise à jour à la place, si c'est ce que vous désirez.

Ce n'est pas l'outil le plus simple au monde à utiliser (lisez «c'est une douleur dans le cul»), mais il fait partie de la boîte à outils standard, et il fait le travail.

+0

Les tables externes sont également "standard" et sont beaucoup plus flexibles que SQL-Loader. Pour commencer, ils sont plus rapides car vous n'avez pas besoin de charger les données dans Oracle pour qu'elles soient accessibles. Et il est présenté de manière à pouvoir utiliser du SQL normal. – CMG

1

Utiliser SQL * Loader

sqlldr [email protected]/password control=load_csv.ctl 

Le fichier load_csv.ctl

load data 
infile '/path/to/mydata.csv' 
into table mydatatable 
fields terminated by "," optionally enclosed by '"'   
(empno, empname, sal, deptno) 

/path/to/mydata.csv est le chemin vers le fichier CSV que vous devez charger , sur Windows quelque chose comme C: \ data \ mydata.csv. Le nom de table est mydatatable. Les colonnes sont listées afin qu'elles apparaissent dans le fichier csv sur la dernière ligne.

À moins d'avoir un très grand volume de données, il est plus facile de conserver les données po. Si les données doivent être chargées régulièrement, cela peut être traité dans un script shell et géré par CRON sur un système U * NX.

-7

d'abord créer une table et mettre toutes vos données CSV dans ce tableau, puis écrire un curseur pour mettre à jour votre table Oracle avec la table créée CSV correspondant aux ID

ex

create table t 

puis importez vos données CSV dans cette table.

écrire maintenant un curseur

declare 
cursor c1 is 
select * from t1; 
begin 
update Oracle table 
set 
t1.Column=t2.column 
where t1.id=t2.id; 

Je pense que cela fonctionnera

Questions connexes