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 :

[OCILIB] - plantage appli. sur OCI_ExecuteStmt


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut [OCILIB] - plantage appli. sur OCI_ExecuteStmt
    Bonjour à tous,

    J'essaye de tester cette section en C qui ne semble pas fonctionner - l'application plante misérablement sur l'ordre OCI_ExecuteStmt.

    L'ordre SQL fonctionne correctement sur Oracle iSQL pourtant - auriez vous une idée ?? .. merci !!.

    // Unload_Position_2.cpp : Defines the entry point for the console application.
    //
    #include <stdafx.h>
    #pragma comment(lib, "ociliba.lib")

    char x;
    int i;

    char CHAR_SQL[256]="";

    int POS_ID_TRACKER;
    OCI_Statement *st;
    OCI_Resultset *rs;

    void err_handler(OCI_Error *err)
    {
    printf("code : ORA-%05i\n"
    "msg : %s\n"
    "sql : %s\n",
    OCI_ErrorGetOCICode(err),
    OCI_ErrorGetString(err),
    OCI_GetSql(OCI_ErrorGetStatement(err)));
    }

    int main()
    {
    OCI_Connection *cn;
    if (!OCI_Initialize(err_handler, NULL, OCI_ENV_DEFAULT))
    {
    OCI_Cleanup();
    return EXIT_FAILURE;
    }

    cn = OCI_ConnectionCreate("dwh", "source", "ripoux",OCI_SESSION_DEFAULT);

    if (cn != NULL)
    {
    printf(OCI_GetVersionServer(cn));
    printf("Server major version : %i\n", OCI_GetServerMajorVersion(cn));
    printf("Server minor version : %i\n", OCI_GetServerMinorVersion(cn));
    printf("Server revision version : %i\n", OCI_GetServerRevisionVersion(cn));
    printf("Connection version : %i\n", OCI_GetVersionConnection(cn));
    printf("Connexion OK....\n\n\n");

    }
    else
    {
    printf("Erreur de connexion à Oracle !!");
    OCI_Cleanup();
    return EXIT_FAILURE;
    }

    st = OCI_StatementCreate(cn);

    strcpy(CHAR_SQL,"SELECT POS_ID_TRACKER, POS_LATITUDE, POS_LONGITUDE, ");
    strcat(CHAR_SQL,"TO_CHAR(POS_DATETIME_POSITION,'YYYY-MM-DD') , TO_CHAR(POS_DATETIME_POSITION,'HH24') , ");
    strcat(CHAR_SQL,"MAX(POS_DATETIME_POSITION), MIN(POS_DATETIME_POSITION) ");
    strcat(CHAR_SQL,"FROM POSITION WHERE POS_VITESSE = 0 ");
    strcat(CHAR_SQL,"GROUP BY POS_ID_TRACKER, POS_LATITUDE, POS_LONGITUDE, ");
    strcat(CHAR_SQL,"TO_CHAR(POS_DATETIME_POSITION,'YYYY-MM-DD'), TO_CHAR(POS_DATETIME_POSITION,'HH24') ");
    strcat(CHAR_SQL,"HAVING ");
    strcat(CHAR_SQL,"((");
    strcat(CHAR_SQL,"(");
    strcat(CHAR_SQL,"((TO_NUMBER(TO_CHAR(MAX(POS_DATETIME_POSITION),'MI')))*60) + ");
    strcat(CHAR_SQL,"(TO_NUMBER(TO_CHAR(MAX(POS_DATETIME_POSITION),'SS')))");
    strcat(CHAR_SQL,")");
    strcat(CHAR_SQL," - ");
    strcat(CHAR_SQL,"(");
    strcat(CHAR_SQL,"((TO_NUMBER(TO_CHAR(MIN(POS_DATETIME_POSITION),'MI')))*60) + ");
    strcat(CHAR_SQL,"(TO_NUMBER(TO_CHAR(MIN(POS_DATETIME_POSITION),'SS')))");
    strcat(CHAR_SQL,")");
    strcat(CHAR_SQL,")/60) > 5");

    printf("%s\n",CHAR_SQL);

    OCI_ExecuteStmt(st,CHAR_SQL);

    rs = OCI_GetResultset(st);

    //while (OCI_FetchNext(rs))
    //.... blabla...

    //printf("\n%d row(s) fetched\n", OCI_GetRowCount(rs));

    OCI_ConnectionFree(cn);

    OCI_Cleanup();
    scanf("%s",&x);
    return EXIT_SUCCESS;
    }

  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
    Bonjour,

    Ta requête fait 620 caractères que tu essaies de placer dans un tableau de 256 caractères...

    Normal que ca plante "misérablement" !
    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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 6
    Par défaut
    Merci Vincent et bravo pour tes développements,

    L'ordre SQL était surtout erroné en fait (620 ?.. avec 512 ça semble fonctionner et de plus si je puis me permettre ça aurait du planter d'abord au "strcat" avant l'injection dans OCI_ExecuteStmt je pense).

    Ma foi pour gérer ce genre de problème de dépassement de dimension, VS me conseille d'utiliser les fonctions strcpy_s et strcat_s qui gèrent correctement ces cas mais malheureusement je n'ai pas réussi à les utiliser pour le moment.

    Encore merci !!.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tomcat]restriction d'accès à une appli sur IP
    Par cwamgis dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 15/03/2010, 11h54
  2. [WD10] plantage appli avec vista sur impression Etat
    Par mnssylvain dans le forum WinDev
    Réponses: 3
    Dernier message: 27/11/2008, 19h02
  3. Réponses: 7
    Dernier message: 20/06/2006, 15h40
  4. [VB6]déploiement d'une appli sur plusieurs postes
    Par Asdorve dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/04/2006, 10h32
  5. Simulation de la parallelisation d'une appli sur un réseau
    Par dinver dans le forum Développement
    Réponses: 1
    Dernier message: 24/06/2005, 19h37

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