Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/12/2006, 11h18   #1
Rédacteur/Modérateur
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 460
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations professionnelles :
Activité : Développeur Java/Web
Secteur : Transports

Informations forums :
Inscription : avril 2002
Messages : 12 460
Points : 19 447
Points : 19 447
Par défaut [ProC][SQL] Utiliser une variable comme nom de curseur

Salut,



Je développe une application C/ProSQL Informix et j'utilise des curseurs pour effectuer des requêtes, ce qui donne grosso-modo :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
EXEC SQL begin declare section;
char            *req;
struct sqlda    *da;
EXEC SQL  end  declare section;
 
/* Preparation de la requete */
EXEC SQL prepare prep_tableau FROM :req;
 
/* Récupération des informations */
EXEC SQL DESCRIBE prep_tableau INTO da;
 
/* ... */
 
/* Declaration du curseur */
EXEC SQL declare curs_tableau scroll cursor FOR prep_tableau;
 
/* Ouverture du curseur */
EXEC SQL open curs_tableau;
 
/* ... */
(je vous passe la gestion des erreurs et le parcours du curseur).


Ce curseur sert à afficher les données sous forme de tableau et reste donc ouvert tant que le programme tourne.

Le problème, c'est que je voudrais utiliser ce code pour afficher plusieurs tableaux à la fois, mais étant donnée que le nom du curseur curs_tableau est en dur dans le code, je suis obligé de fermer la première requête (et donc effacer le tableau précédent).




Il semble qu'il soit possible d'utiliser une variable comme nom de curseur, du style :
Code :
1
2
3
EXEC SQL prepare :ma_var_prep from :req;

EXEC SQL declare :ma_var_cursor scroll cursor for prep_tableau;
Mais j'ai trouvé très peu de documentation là dessus, et surtout j'ignore totalement le type que je dois utiliser pour :ma_var_prep et :ma_var_cursor.



Est-ce que quelqu'un a déjà fait ca, ou pourrait me guider vers une doc clair à ce sujet (tout ce que je trouve concerne le code que j'utilise actuellement).




a++


PS: Je précise que j'ai déjà pris en compte la possibilité de recopier la totalité du curseur en mémoire afin de le fermer au plus tôt, mais cette solution ne m'intéresse pas.
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2006, 11h55   #2
Rédacteur/Modérateur
 
Avatar de adiGuba
 
Homme
Développeur Java/Web
Inscription : avril 2002
Messages : 12 460
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Corse (Corse)

Informations professionnelles :
Activité : Développeur Java/Web
Secteur : Transports

Informations forums :
Inscription : avril 2002
Messages : 12 460
Points : 19 447
Points : 19 447
Je viens de trouver !!! En fait c'est tout con j'ai simplement jeter un coup d'oeil au code C généré par le pré-compilateur SQL
(je n'y avait pas pensé plus tôt car notre script supprime automatiquement ce fichier).


En fait les identifiants de curseur ne sont ni plus ni moins que des chaines de caractères, c'est à dire des char* !


a++
__________________
adiGuba [ tutoriels | blog | twitter ] Rédacteur/Modérateur Java Présentation de Java SE 7 (commentaires)
adiGuba est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h44.


 
 
 
 
Partenaires

Hébergement Web