IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Interfaces de programmation Oracle Discussion :

[API C] se connecter sous Oracle : optimisation


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Par défaut [API C] se connecter sous Oracle : optimisation
    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 ;
    set linesize 3000 ;
    set trimspool on ;
    set pagesize 0 ;
    set echo off ;
    set heading off ;
    set feedback off ;
    set termout off ;
    set verify off ;
    set colsep '#';
    spool tp2_ict01_wrk.txt;
    select * from tp2_ict01_wrk;
    spool off ;
    quit;
    - 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

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    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

  3. #3
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Il suffit de faire un batch fetch:

    http://download-west.oracle.com/docs...htm#sthref1232

  4. #4
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Par défaut
    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

  5. #5
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    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.

  6. #6
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 37
    Par défaut
    > 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

Discussions similaires

  1. Initiation à l'optimisation de requêtes SQL sous ORACLE
    Par Vincent Rogier dans le forum Contribuez
    Réponses: 12
    Dernier message: 30/09/2011, 14h09
  2. Probleme de connection sous ORACLE 9i sous XP Pro
    Par MAXJEREM dans le forum Connexions aux bases de données
    Réponses: 14
    Dernier message: 05/03/2008, 17h52
  3. Réponses: 8
    Dernier message: 24/09/2007, 09h43
  4. Optimisation de requetes SQL sous oracle
    Par santana2006 dans le forum Oracle
    Réponses: 5
    Dernier message: 28/08/2006, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo