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 :

[OCI] une erreur dans l'execution pour cette requete SQL


Sujet :

Interfaces de programmation Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 42
    Points
    42
    Par défaut [OCI] une erreur dans l'execution pour cette requete SQL
    Bonjour, le code suivant fonctionne pour cette requete SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom from client where code=:cd
    mais si je change le requete par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom,prenom from client where code=:cd
    ça fonctionne pas

    ci-dessous tout le code source

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
     
    #include "stdafx.h"
    #include <conio.h>
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <oci.h>
     
    static OCIEnv           *p_env;
    static OCIError         *p_err;
    static OCISvcCtx        *p_svc;
    static OCIStmt          *p_sql;
    static OCIDefine        *p_dfn    = (OCIDefine *) 0;
    static OCIBind          *p_bnd    = (OCIBind *) 0;
     
     
    void _tmain(int argc, _TCHAR* argv[])
    {
       int             p_bvi;
       char            p_sli[20];
       int             rc;
       char            errbuf[100];
       int             errcode;
     
       rc = OCIInitialize((ub4) OCI_DEFAULT, (dvoid *)0,  // Initialize OCI
               (dvoid * (*)(dvoid *, size_t)) 0,
               (dvoid * (*)(dvoid *, dvoid *, size_t))0,
               (void (*)(dvoid *, dvoid *)) 0 );
     
       // Initialize evironment
       rc = OCIEnvInit( (OCIEnv **) &p_env, OCI_DEFAULT, (size_t) 0, (dvoid **) 0 );
     
       // Initialize handles
       rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_err, OCI_HTYPE_ERROR,
               (size_t) 0, (dvoid **) 0);
       rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_svc, OCI_HTYPE_SVCCTX,
               (size_t) 0, (dvoid **) 0);
     
       // Connect to database server
       rc = OCILogon(p_env, p_err, &p_svc, (OraText *) "test", 4, (OraText *)"test", 4, (OraText *)"DBV8", 4);
       if (rc != 0) {
          OCIErrorGet((dvoid *)p_err, (ub4) 1, (text *) NULL, &errcode, (OraText *) errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
          printf("Error - %.*sn", 512, errbuf);
          exit(8);
       }
     
       /* Allocate and prepare SQL statement */
       rc = OCIHandleAlloc( (dvoid *) p_env, (dvoid **) &p_sql,
               OCI_HTYPE_STMT, (size_t) 0, (dvoid **) 0);
       rc = OCIStmtPrepare(p_sql, p_err, (OraText *) "select nom,prenom from client where code=:cd",
               (ub4) 37, (ub4) OCI_NTV_SYNTAX, (ub4) OCI_DEFAULT);
     
       /* Bind the values for the bind variables */
       p_bvi = 1;     /* Use DEPTNO=10 */
       rc = OCIBindByName(p_sql, &p_bnd, p_err, (text *) ":cd",
               -1, (dvoid *) &p_bvi, sizeof(int), SQLT_INT, (dvoid *) 0,
               (ub2 *) 0, (ub2 *) 0, (ub4) 0, (ub4 *) 0, OCI_DEFAULT);
    	//printf("rc = %d",rc);
       // Define the select list items
       rc = OCIDefineByPos(p_sql, &p_dfn, p_err, 1, (dvoid *) &p_sli,
               (sword) 20, SQLT_STR, (dvoid *) 0, (ub2 *)0,
               (ub2 *)0, OCI_DEFAULT);
     
       // Execute the SQL statment
       rc = OCIStmtExecute(p_svc, p_sql, p_err, (ub4) 1, (ub4) 0,
               (CONST OCISnapshot *) NULL, (OCISnapshot *) NULL, OCI_DEFAULT);
     
       while (rc != OCI_NO_DATA) {             // Fetch the remaining data
          printf("\n%s",p_sli);
          rc = OCIStmtFetch(p_sql, p_err, 1, 0, 0);
       }
     
       rc = OCILogoff(p_svc, p_err);                           // Disconnect
       rc = OCIHandleFree((dvoid *) p_sql, OCI_HTYPE_STMT);    // Free handles
       rc = OCIHandleFree((dvoid *) p_svc, OCI_HTYPE_SVCCTX);
       rc = OCIHandleFree((dvoid *) p_err, OCI_HTYPE_ERROR);
     
       getch();
    }
    Bien à vous

    Abdelkaoui

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    C'est normal !!

    "select nom prenom...." retourne 1 élement qui la concaténation des deux champs donc, 1 out buffer à définir..

    "select nom, prenom...." retourne 2 élements donc, 2 out buffers à définir..

    Il faut donc faire deux appels à OCIDefineByPo()....
    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 du Club
    Inscrit en
    Mars 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 84
    Points : 42
    Points
    42
    Par défaut
    en fait le probleme reside dans l'ajout de la clause WHERE. autrement dit, cette requete fonctionne bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom,prenom from client
    mais lorsqu'on ajoute la condition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nom,prenom from client where code=:c
    ça ne fonctionne plus

    Bien à vous

    Abdelkaoui

Discussions similaires

  1. Y a-t-il une erreur dans cette question ?
    Par Ennydra dans le forum Général Java
    Réponses: 2
    Dernier message: 17/12/2014, 11h56
  2. Réponses: 3
    Dernier message: 21/09/2007, 16h28
  3. erreur dans l'exécution de la requête
    Par robert_trudel dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 23/11/2006, 23h57
  4. Deux passages dans mon "execute" pour une seule soumission
    Par fabricew59 dans le forum Struts 1
    Réponses: 7
    Dernier message: 27/06/2006, 14h24
  5. erreur dans l'execution d'une requete
    Par marsupilami34 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/09/2005, 16h47

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