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 :

[PRO*C] export de rec de table oracle


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut [PRO*C] export de rec de table oracle
    Salut à tous,

    Dans le cadre d'un projet que je dois prochainement présenter, je dois effectuer un export d'une table oracle au choix au format xls.

    Pour cela je passe par du PRO*C.

    J'arrive à effectuer l'export de n'importe quel table en passant par des structures mais le problèmes et que je dois codé en dur à l'avance ces structures suivant la table que je veux important, là ou moi j'aimerais pouvoir
    choisir une table sans devoir codé quelques chose en dur à l'avance spécifique à cette table.

    Car les structures ne peuvent pas être identique(donc générique)pour des tables différentes malheureusement.

    J'ai pensé par passer par des tableaux au lieu de structures pour recuperer les informations d'enregistrement mais d'après mon professeur j'aurais des soucis de conversion qui ne me permettent pas d'utiliser cette méthode.

    Ainsi seriez-vous quel stratagème employer pour pouvoir importer->conserver->retranscrire les enregistrements de tables sous ORACLE avec du PRO*C ?



    Merci à vous de votre précieuse aide

  2. #2
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    PRO*C est-il imposé ?

    en effet les tableaux te poseront problème et la je vois mal une méthode générique qui fonctionne en PRO*C.

    A moins de faire une procédure PL/SQL qui te retourne un curseur que tu fetches en PROC*C. Ce curseur te retournerait un seul champs (l'ensemble des champs de la table concaténés), donc plus de soucis de variabilité du nombre de champs.

    Ou alors, en OCI avec OCILIB, cela serait mille fois plus simple..
    Ou même sql*plus....
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Bonjour Vincent,
    PRO*C est-il imposé ?
    Oui PRO*C est imposé mais dans un cadre général, je peux utilisé toutes sortes d'autres technologies pour arrivé au but demandé sans problème.

    A moins de faire une procédure PL/SQL qui te retourne un curseur que tu fetches en PROC*C. Ce curseur te retournerait un seul champs (l'ensemble des champs de la table concaténés), donc plus de soucis de variabilité du nombre de champs.
    Oula, tous les champs concaténés, c'est pas très bon ça. Enfin si tu connais un solution pour les diviser après pourquoi pas, sinon ca n'a aucun intérêt.

    Ou alors, en OCI avec OCILIB, cela serait mille fois plus simple..
    Ou même sql*plus....
    Je ne connais pas OCILIB, qu'est ce donc ?
    En SQL*plus d'accord mais puis-je en faire quelques choses d'automatique ?
    puisque l'idée est de faire un mini programme console qui listerait tout les champs d'une base(pour cela pas trop de soucis je pense) puis qui demanderait laquelle on souhaite exporté en xls et le travail se fait tout seul.

  4. #4
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    voici un prog d'export de tables générique avec OCILIB

    70 lignes tout complet (bonn c'est basique, sans error checking mais c'est fonctionnel !)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    #include "ocilib.h"
     
    void export_table(OCI_Connection *cn, char *table)
    {
        OCI_Statement *st = NULL;
        OCI_Resultset *rs = NULL;
        int i, nb = 0;
        FILE *f = NULL;
        char buf[100] = "";
     
        sprintf(buf, "%s.csv", table);
     
        f = fopen(buf, "w");
     
        if (f)
        {
            st = OCI_StatementCreate(cn);
     
            if (st)
            {
                sprintf(buf, "select * from %s", table);
     
                OCI_ExecuteStmt(st, buf);
     
                rs = OCI_GetResultset(st);
                nb = OCI_GetColumnCount(rs);
     
                while (OCI_FetchNext(rs))
                {
                    for (i = 1; i <= nb; i++)
                    {
                        char *s =  OCI_GetString(rs, i);
     
                         fprintf(f, s != NULL ? s :  "");
                         fprintf(f, i == nb   ? "\n" : ";");
                    }
                }
     
                OCI_StatementFree(st);
            }
     
            fclose(f);
        }
    }
     
     
    int main(void)
    {
        OCI_Connection *cn = NULL;
     
        if (!OCI_Initialize(NULL, NULL, OCI_ENV_DEFAULT))
            return EXIT_FAILURE;
     
        cn  = OCI_ConnectionCreate("db", "usr", "pwd", OCI_SESSION_DEFAULT);
     
        if (cn)
        {
            export_table(cn, "table1");
            export_table(cn, "table2");
        }
     
        OCI_ConnectionFree(cn);
     
        OCI_Cleanup();
     
        return EXIT_SUCCESS;
    }
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Intéressant par contre je ne vois pas pas de SQL dans le code.
    Ca risque d'être embêtant car je dois démontrer des acquis qui passe par le fait de maitrisé SQL.

    Néanmoins je garde bien ça au chaud car ca risque sûrement de me servir.

    Quel serait la solution sous SQL*plus ?
    Je ne veux pas spécialement de code(enfin bienvenue quand même)mais plutôt des pistes sur comment procédé maintenant que tu m'a montré la piste OCILIB.



    PS: sinon pour le code OCILIB je peux broder du C autour pour l'interfacage utilisateur et quelques autres petites broutilles.

  6. #6
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Par défaut
    Citation Envoyé par miltone Voir le message
    Intéressant par contre je ne vois pas pas de SQL dans le code.
    Ca risque d'être embêtant car je dois démontrer des acquis qui passe par le fait de maitrisé SQL.
    exporter une table revient à faire un 'select * from table'
    primo, c'est dans le code que je t'ai filé
    deuxio, je ne vois pas en quoi exporter une table nécessite de maitriser le SQL.

    y a un chti quelque part ou y a un truc qui m'échappe...
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

Discussions similaires

  1. Exporter une table oracle hibernate dans une autre
    Par pikameuh dans le forum Hibernate
    Réponses: 5
    Dernier message: 17/07/2014, 16h11
  2. Réponses: 1
    Dernier message: 08/03/2011, 00h13
  3. Exporter Des Donnees De Tables Oracle Vers Excel ?
    Par Djene dans le forum Administration
    Réponses: 10
    Dernier message: 13/06/2009, 19h02
  4. export table oracle
    Par velo83 dans le forum Oracle
    Réponses: 5
    Dernier message: 04/01/2007, 18h47
  5. supprimer un enregistrement vide dans une table oracle
    Par shurized dans le forum Bases de données
    Réponses: 11
    Dernier message: 07/09/2004, 16h55

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