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 10/02/2011, 11h43   #1
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Par défaut [OCILIB] Informations disponibles avant fetch

Bonjour,

Afin d'apporter un peu de dynamique à nos développements, nous avons besoin de contrôler sur une requête sql les différents colonnes en input / ouput.

Lorsque l'on utilise OCI_Prepare, OCI_Execute (le petit nouveau OCI_Parse) et toutes les fonctions associées, avons-nous accès (et est-ce possible...?) à des informations sur la requête parsée?
Bref, est-ce que la liste des binds attendus (ubinds, rbinds...) est accessible sous une quelconque forme?

D'avance merci.
Fly.
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 13h40   #2
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
C'est à dire ?

la liste des binds d'un statement est accessible avec :

OCI_GetBindCount() et OCI_GetBind() qui retourne un handle OCI_Bind dont tu peux explorer les propriétés..
__________________
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
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h09   #3
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Citation:
Envoyé par Vincent Rogier Voir le message
C'est à dire ?

la liste des binds d'un statement est accessible avec :

OCI_GetBindCount() et OCI_GetBind() qui retourne un handle OCI_Bind dont tu peux explorer les propriétés..
Un peu plus de précisions par l'exemple

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
	st = OCI_StatementCreate(cn);
	OCI_Prepare(st,"select id_test1,col_02 from test1 where id_test1=:vidtest1");
 
/*
  Je voudrai connaitre ici:
 - la liste des colonnes sélectionnées (id_test1 et col_02) 
 - la liste des binds attendus (vidtest1)
  En effet, je ne connaîtrai pas à priori le contenu de la requête
*/
 
/*
 Les binds seront réalisés ici dynamiquement
*/
	OCI_Execute(st);

Donc, dois-je réaliser un parser ou est-ce qu'OCILIB peut connaitre ces informations ?

A priori, le lien ci-dessous explique comment retrouver des informations sur la liste des items sélectionnés :

http://download.oracle.com/docs/cd/E...ql.htm#i441217



Merci.
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 19h27   #4
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
je comprends mieux.

Pour les binds, il est impossible d'avoir des infos à partir d'un ordre SQL.
Cela est seulement possible une fois les bindings fait.

Pour les selects, par contre, il serait possible de ne faire qu'un "describe" en terme d'OCI lors de l'appel à OCIStatementExecute() ce qui pourrait populer un resultset "vide".

Pour le moment, la seule facon dans OCILIB c'est d'exécuter la requete et récupérer le resultset et explorer ses colonnes sans fetcher.

De même que j'ai récemment ajouté OCI_Parse(), je pourrais rajouter une fonction OCI_Describe() qui serait un OCI_ExecuteStmt() en mode describe et qui retournerait un resultset sans aucune allocation interne pour les données du select et qui permettrait d'accéder à la définition des données... Je vais y réfléchir pour la 3.9... Le seul intêret par rapport à la solution actuelle que j'ai mentionné, c'est que d'une part il n'y aurait pas d'allocation mémoire pour les données et d'autre part que si la requête contient des appels à des séquencés, celles ci ne seraient pas modifiées.
__________________
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
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web