J'ai essayé Google au début mais pas de chance. Est-il possible de mettre à jour les tables du fichier CSV? J'utilise SQL Developer et j'utilise un script pour exporter des lignes modifiées vers un fichier CSV. Je voudrais mettre à jour les lignes modifiées via ce fichier CSV d'un client. Je ne veux pas importer tout le fichier car le client a déjà une table miroir, je voudrais juste mettre à jour les données de ce qu'il figure dans le fichier CSV. Est-ce possible?
Sinon, quelle serait la meilleure approche?
Je vous suggérerais de faire appel de tables externes. Vous pouvez créer une table externe sur votre fichier CSV à l'aide de Oracle_LOADER
pilote puis mettez à jour votre table existante avec des données dans votre table externe à l'aide de DML (MERGE
par exemple).
Consultez le Guide des utilitaires Oracle pour des informations détaillées.
Ce qui suit est mon échantillon de la manière dont vous pouvez mettre à jour les tables à partir de fichiers plats.
Vous pouvez d'abord créer le répertoire dans lequel votre fichier plat sera situé:
SQL> create directory ext_tab_dir as '/home/Oracle/ora_load';
Directory created.
SQL> grant read, write on directory ext_tab_dir to spongebob;
Grant succeeded.
Ensuite, vous créez votre table externe:
SQL> CREATE TABLE emp_load (empid number(3),
first_name CHAR(15),
last_name CHAR(20),
year_of_birth CHAR(4))
ORGANIZATION EXTERNAL (
TYPE Oracle_LOADER DEFAULT DIRECTORY ext_tab_dir
ACCESS PARAMETERS (RECORDS FIXED 21 FIELDS (
empid char(1),
first_name CHAR(7),
last_name CHAR(8),
year_of_birth CHAR(4)))
LOCATION ('info.dat')
);
Nous supposerons que vous avez déjà la table que vous souhaitez mettre à jour avec des données à partir du fichier plat:
SQL> CREATE TABLE emp (empid number(3),
first_name CHAR(15),
last_name CHAR(20),
year_of_birth CHAR(4));
SQL> insert into emp values(1, 'SpongeBob', 'SquarePants', '1997');
SQL> insert into emp values(2, 'Patrick', 'Star', '1997');
SQL> insert into emp values(3, 'Squidward', 'Tentacles', '1997');
(Ici, je viens de le charger avec des données d'échantillonnage.)
Maintenant c'est ce que votre info.dat
contient, par exemple:
[Oracle@oca ~]$ cat ora_load/info.dat
1Alvin Tolliver1976
2KennethBaer 1963
3Mary Dube 1973
4NandiniShastri 1985
À ce stade, vous allez simplement mettre à jour votre table existante avec les données ci-dessus de la table externe:
SQL> merge into emp e1
using emp_load e2
on (e1.empid = e2.empid)
when matched then update set e1.first_name = e2.first_name,
e1.last_name = e2.last_name
when not matched then insert
values (e2.empid, e2.first_name, e2.last_name, e2.year_of_birth);
Voici ce que vous obtiendrez à la suite:
SQL> select * from emp;
EMPID FIRST_NAME LAST_NAME YEAR
---------- --------------- -------------------- ----
1 Alvin Tolliver 1997
2 Kenneth Baer 1997
3 Mary Dube 1997
4 Nandini Shastri 1985