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 18/10/2011, 12h48   #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] Plantage OCI_Execute

Bonjour,

J'ai un plantage d'ocilib sur l'instruction OCI_Execute.
la particularité est que la requête SQL est longue, environ 700 binds...
Merci de m'indiquer une piste à suivre... (tests à réaliser avant l'execute)

Fly.

Version OCILIB
3.4.0 Itanium
v$version
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for HPUX: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2011, 16h19   #2
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Quelques infos supplémentaires.
Après une préparation d'un source simple qui tente de reproduire le problème, j'ai une erreur du type ORA-24550.

A l'exécution, cela donne quelque chose comme cela:
Citation:
ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_addr=3a4c
4f4e47554555]
kpedbg_dmp_stack()+368<-kpeDbgCrash()+160<-kpeDbgSignalHandler()+928<-skgesig_si
gactionHandler()+528<-<kernel><-ocistrcasecmp()+192<-OCI_HashLookup()+320<-OCI_H
ashAdd()+336<-OCI_HashAddInt()+160<-OCI_BindData()+5632<-OCI_BindInt()+336<-do_i
nsert()+1744<-main()+1168<-main_opd_entry()+80
Killed
J'ai trouvé la note 780553.1 sur metalink...

Mais elle ne semble pas s'appliquer à cette version d'ORACLE.

...
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 10h54   #3
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Bonjour,

Après quelques tests, le même programme C fonctionne correctement sur la version OCILIB 3.9.2...

Confirmez-vous ce problème sur la version 3.4.0 ?

D'avance merci.
Fly.
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 13h25   #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
Salut,

En version 3.4, OCILIB supportait au maximum 512 binds par requête.

Depuis la 3.5.0, le max est 1024

Vincent.
__________________
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 20/10/2011, 17h10   #5
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Bonjour,

La réponse est claire... (pourquoi suis-je resté sur la version 3.4.0, moiiiii )

C'est parti pour une version OCILIB 3.9.2 sur HP Itanium!

Dois-je ajouter un contrôle sur le dépassement du nombre de binds ou est-ce que la version 3.9.2 réalise ce test ?

Pas de conseil particulier pour un passage de la 3.4.0 à la 3.9.2 ?

D'avance merci.
FRanck.
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 17h57   #6
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
pour le contrôle du nombre de bind, oui !
Si tu dépasses le max, OCILIB lève une erreur de type OCI_ERR_MAX_BIND.

Pour la migration, rien de particuliers, mais regardes le changelog au cas ou.

Pour info une 3.9.3 va sortir en début de semaine (quelques fix mineurs)
__________________
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 20/10/2011, 18h27   #7
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Re,

J'utilise dans mon programme OCI_BindString et OCI_BindInt.
Ces deux fonctions ne semblent pas me renvoyer la valeur false en 3.4.0...
le plantage vu précédemment se produit sur un OCI_BindInt et j'ai le plantage suivant sur le 528 binds... ?

Donc je rectifie, le plantage est sur OCI_Bind.... et non sur OCI_Execute dans l'exemple...

Code :
1
2
3
4
5
6
7
8
9
 
OCI Bind #528 Longueur :LONGUEUR_21_1
ORA-24550: signal received: [si_signo=11] [si_errno=0] [si_code=1] [si_addr=3a4c
4f4e47554555]
kpedbg_dmp_stack()+368<-kpeDbgCrash()+160<-kpeDbgSignalHandler()+928<-skgesig_si
gactionHandler()+528<-<kernel><-ocistrcasecmp()+192<-OCI_HashLookup()+320<-OCI_H
ashAdd()+336<-OCI_HashAddInt()+160<-OCI_BindData()+5632<-OCI_BindInt()+336<-do_i
nsert()+2032<-main()+1344<-main_opd_entry()+80
Killed
Mes tests sont du type

Code :
1
2
3
4
5
6
7
8
9
 
 
			sprintf(w,":LONGUEUR_%d_%d",i+1,j+1);
			fprintf(stdout,"OCI Bind #%d Longueur %s\n",nbinds,w);
			IF (!OCI_BindInt(st_insert,w,&longueur[i][j]))
			{
				sprintf(mess,"Error OCI Bind LONGUEUR #%d",nbinds);
				do_error(mess);
			}
cobfly 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 05h25.


 
 
 
 
Partenaires

Hébergement Web