|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 37 ![]() |
Bonjour,
J'utilise le précompilateur "PROC" pour générer des ressources C me permettant de me connecter sur une base ORACLE et d'effectuer des requêtes en C. Mon but est de charger une table oracle dans un tableau mémoire en C et de l'exploiter par la suite. J'ai donc déclaré un curseur puis effectuer des fetchs pour remplir mon tableau (ex : select ..liste de tous mes champs... from TABLE). Tout marche très bien mais je constate des problèmes de performances. A vrai dire, j'ai testé cette solution qui est plus rapide : - j'exécute un script SQL qui génére un fichier plat de ma table oracle avec la commande suivante : sqlplus SA/SASASA@TNR01 @script.sql set space 0 ;- ensuite, j'ouvre le fichier tp2_ict01_wrk.txt en C et lit ligne par ligne en découpant les lignes en token pour charger mon tableau mémoire. Cette solution me permet de gagner 25% de temps sur ce que j'ai prévu. En somme, j'utilise la performance de l'outil SQLPLUS pour m'en sortir au mieux. Si j'arrivais à coder une partie de code en C m'envoyant les lignes une lignes sans passer par ce fichier plat, je gagnerai bien plus de temps. Mais je ne sais pas comment m'en sortir. Auriez-vous une idée ou des pistes que je puisse exploiter ? Merci d'avance. Kévin |
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() Inscription : février 2006 Messages : 3 433 ![]() |
Une piste pour une utilisation rapide de l'OCI (Oracle Call Interface) en langage C par Tom Kyte: http://asktom.oracle.com/pls/ask/f?p...A:459020243348
|
|
|
00
|
|
|
#3 |
|
Membre expérimenté
![]() ![]() Inscription : décembre 2005 Messages : 541 ![]() |
|
|
|
00
|
|
|
#4 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 37 ![]() |
Pifor> J'ai testé la solution présent dans le lien que tu a inscrit.
Effectivement, j'ai gagné en performance mais la solution de passer par un spool puis d'exploiter le fichier C est plus rapide. Je vous remercie pour vos réponse et vais adopter la solution que j'avais décrite. Kévin |
|
|
00
|
|
|
#5 |
|
Membre expérimenté
![]() ![]() Inscription : décembre 2005 Messages : 541 ![]() |
Passer par SQL*Plus pour faire un bulk fetch n'a aucun sens. SQL*PLus, par ailleurs lui-meme ecrit en C, ne peut que rajouter de l'overhead, et utiliser un fichier plat comme etape intermediaire devrait penaliser encore plus les performances.
|
|
|
00
|
|
|
#6 |
|
Candidat au titre de Membre du Club
![]() Inscription : mars 2004 Messages : 37 ![]() |
> plabrevo : je suis bien d'accord avec toi mais pour l'instant je ne suis pas arrivé à coder un programme aussi rapide que SQL*PLUS.
Pour une table de 80 000 lignes avec 10 colonnes : - SQL*PLUS met 20 secondes + 1 à 2 secondes pour exploiter le fichier - Ma 1ère méthode met 35 secondes - En utilisant la méthode décrit dans le post de pifor, je descends à 29 secondes. A moins qu'une personne est à me proposer un code aussi rapide que SQL*PLUS écrit en Pro*C, je n'ai plus qu'à utiliser la méthode avec SQL*PLUS |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com