Bonjour,
Je me permet de vous présenter mon problème pour avoir des idées nouvelles.
J'ai une base Access avec 7 Millions de lignes. Je ne connais pas a l'avance le nombre d'attribut de cette table. J'ai une base Oracle qui a le meme nombre d'attribut sur laquelle j'accède via ODBC.
Le problème est simple : Je veux copier la table Access dans Oracle par programmation. Ce que je fais pour le moment, c'est une sélection de toute les lignes dans access via une requete de type "select * from matable" et sqlexec (sur 7 Millions de lignes, temps d'éxécution 20 Minutes, ca reste raisonnable) Je parcours ensuite le résultat de la requete avec SQLFetch et je fais des insert dans ma table Oracle. C'est la que les problèmes commencent. D'aprés mes calculs, il faudrait 13h20 pour me copier les lignes...(alors que seulement 20 pour les lires ?????) Bon, ce n'est que du calcul, alors j'imagine que se serait peut être moins. Mais mon problème, c'est que ca plante aux environs de 3 Millions de ligne (problème de mémoire de pile je suppose...)
Donc, il faut que je revois le problème autrement.... voici la structure de mon code :
NumConnexion=sqlConnecte("MabaseAccess","","","","Access") NumConnexion2=sqlConnecte("MabaseOracle","util1","mdp1","","ODBC") SQLChangeConnexion(NumConnexion)
req="Select * from matableAccess" si sqlExec(req,"REQ") alors Tantque sqlFetch("REQ")=0 Req2="insert into matableoracle values" etc..... boucle de parcours des colonnes SqlChangeConnexion(NumConnexion2) SQLExec(req2,"REQ2") SQLChangeConnexion(NumConnexion) Fin fin sqlFerme("req") Fermeture des connexions avec SQLDéconnecte.
Je suis ouvert a toutes idées pour optimiser tout ca (sauf celle d'utiliser un accès natif oracle) Merci d'avance.
Delahaye Fabien. |