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] tableau


Sujet :

Interfaces de programmation Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 3
    Par défaut [PRO*C] tableau
    Amis programmeurs Bonjour,

    Actuellement étudiant en DUT Informatique, je suis actuellement confronté à un problème qui concerne Oracle et plus spécifiquement au PRO-C (j'espère que je suis bien dans la bonne section ),

    Le but de ma fonction est de permettre à l'utilisateur à travers une interface console de faire une recherche sur une table (avec entre autres, un titre). Voici le code:

    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
    void recherche_titre()
    {	
    	
    	EXEC SQL begin DECLARE section;
    	
    	char sql_tableau[100];
    	char sql_resul[250];
    	
    	EXEC SQL end DECLARE section;
    	
    	printf("Entrez le titre du sujet\n");
    	fgets(sql_tableau, 100, stdin);
    	
    	EXEC SQL DECLARE requete CURSOR FOR SELECT TITRE FROM SUJET WHERE TITRE LIKE :sql_tableau;
    	
    	EXEC SQL OPEN requete;
    	
    	EXEC SQL FETCH requete INTO :sql_resul;
    	
    	while((sqlca.sqlcode >= 0) && (sqlca.sqlcode != 1403))
    	{
    		printf("%s\n", sql_resul);
    		EXEC SQL FETCH requete INTO :sql_resul;
    	}
    	
    
    	
    	EXEC SQL CLOSE requete;
    }
    Mon problème est le suivant lorsque l'utilisateur rentre le titre du sujet qu'il souhaite consulter il est stocké dans un tableau de char qui ici s'appelle sql_tableau (merci le C pour la gestion des string :S), la requête renvoie un ensemble de résultats et c'est pour cela si j'ai bien compris que je dois utiliser un curseur pour les stocker. L'ensemble de ses résultat est stocké dans un tableau sql_resul.

    Lorsque que j'exécute mon programme rien ne s'affiche en résultat mais quand je remplace le EXEC SQL DECLARE requete CURSOR FOR par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXEC SQL DECLARE requete CURSOR FOR SELECT TITRE FROM SUJET WHERE TITRE LIKE 'Les aventures du Dupont';
    j'ai plusieurs résultats qui s'affichent à l'écran.

    Peut-être un problème de syntaxe?!

    Merci d'avance et bonne journée.

    Cordialement

    _Virtuose_

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Avez vous essayé d'utiliser le type varchar pour vos variables sql_tableau et sql_result ?

  3. #3
    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
    Nann... Ca c'est pas possible !

    La seule chose que tu puisse faire c'est faire contruire une chaine avec toute les valeurs pour faire un "in('v1', 'v2', .... 'vX')"
    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

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Vincent Rogier Voir le message
    Nann... Ca c'est pas possible !

    La seule chose que tu puisse faire c'est faire contruire une chaine avec toute les valeurs pour faire un "in('v1', 'v2', .... 'vX')"
    Salut Vincent,

    Je ne pense pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> variable e1 varchar2(10)
    SQL> exec :e1 := 'SMITH'
     
    Procédure PL/SQL terminée avec succès.
     
    SQL> select empno from emp where ename like :e1;
     
         EMPNO
    ----------
          7369
     
    SQL>
    Bon, ce n'est pas vraiment du pro*c () mais ça devrait tourner (ou j'ai raté quelque choses)

  5. #5
    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
    ce n'est pas le like + bind qui pose probleme mais le fait que le bind soit un tableau de valeurs...

    Bon, je viens de relire le post initial et m'apercoit que la variable n'est en fait qu'une simple chaine de caractère alors que je pensais que c'était un tableau de string.... 'sql_tableau'.... Comme le dis Virtuose, le C c'est pas son truc....

    Bon oublie ce que j'ai bien, je suis hors sujet car je pensais que le bind était un tableau de valeurs.....
    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

  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
    bon, j'ai relu le post....


    passer directement une chaine de caractères récupérée d'une entrée standard sans contrôle aucun et la passer directement à Oracle, c'est normal que ca marche pas et puis c'est pas très pro du tout !!

    pour que le like fonctionne :

    - déja il faut gérer la casse. donc passer en majuscule le contenu de sql_tableau et faire dans la requête un 'UPPER(TITRE) LIKE :sql_tableau'
    - ensuite, a moins que le gars soit une bête de littérature et d'orthographe, il faut entourer la valeur saisie en entrée par des %
    - faire des contrôles sur le contenu de sql_tableau (trimmer, supprimer les caractères non imprimables, les retours chariots, etc..)

    Ensuite cela pourra peut être marcher correctement ....
    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. [Unity Pro XL] Problème déclaration tableau de mots.
    Par flog73 dans le forum Automation
    Réponses: 10
    Dernier message: 25/08/2023, 08h32
  2. [PRO*C] Allocation dynamique d'un tableau de VARCHAR
    Par NéalZheimer dans le forum Interfaces de programmation
    Réponses: 5
    Dernier message: 07/07/2006, 13h02
  3. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  4. Réponses: 4
    Dernier message: 13/05/2002, 16h43
  5. [PRO*C] Recherche information
    Par Anonymous dans le forum Interfaces de programmation
    Réponses: 2
    Dernier message: 04/04/2002, 17h53

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