Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 13/05/2011, 10h51   #1
Membre confirmé
 
Avatar de pmboutteau
 
Inscription : février 2005
Messages : 504
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 504
Points : 267
Points : 267
Par défaut Problème sur une requète qui fonctionne dans SQL developper et pas dans un appel de PRO*C

Bonjour,

Voici le souci. Je génère des requètes dynamiques via une ihm qui lance derrière un programme C où les curseurs sont fait en PRO*C.

Je trace mes erreurs oracles. Et voici la requête qui fonctionne sous SQL developper mais qui me génére une erreur ORA-01403: no data found dans ma trace en C.

Code :
1
2
3
4
SELECT UNIQUE matind,(rtrim(A.SJNOMU) || ' ' || rtrim(A.SJPREN))
FROM travail T,PSJ A WHERE
(( A.codhop='081' AND A.matric=T.matind)) AND T.nomreq='1' AND T.utilisa='PBOU81'
ORDER BY (rtrim(A.SJNOMU) || ' ' || rtrim(A.SJPREN)) ASC;
Si quelqu'un a déjà rencontré ce genre de souci. Merci
__________________
ours ours !! Au début elle est froide mais après elle est bonne!
pmboutteau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h13   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Pour éviter toutes ambiguités, tu te connectes bien avec SqlDeveloper avec le même user que l'appli en C ?
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 11h21   #3
Membre confirmé
 
Avatar de pmboutteau
 
Inscription : février 2005
Messages : 504
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 504
Points : 267
Points : 267
Oui oui.

Et mon tri est bon dans l'IHM.

C'est juste sur la trace que çà foire. C'est assez étrange. Je ne sais pas si cela vient du compilateur C. La version d'oracle c'est 10g
__________________
ours ours !! Au début elle est froide mais après elle est bonne!
pmboutteau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 12h23   #4
Rédacteur
 
Inscription : décembre 2002
Messages : 2 385
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 385
Points : 3 263
Points : 3 263
Citation:
Envoyé par pmboutteau Voir le message
Et voici la requête qui fonctionne sous SQL developper
"Elle fonctionne", ça veut dire qu'elle ne renvoie pas d'erreur et que le résultat est juste vide ?
Ou bien vous avez un résultat non vide ?
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h02   #5
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Salut !

Au pif, je dirais que ton problème est que tu cherches à faire un fetch dans ton PRO*c et qu'il n'y a plus de ligne...

Tu n'as pas une instruction pour sortir quand le curseur arrive au bout ?

(La différence avec SQLDevelopper, c'est que quand il n'y a plus de ligne, il ne cherche pas continuer à fetch...)
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 14h16   #6
Membre confirmé
 
Avatar de pmboutteau
 
Inscription : février 2005
Messages : 504
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 504
Points : 267
Points : 267
oui la requête affiche bien les données dans SQLDeveloper

Par contre sur le fetch en C, à chaque lecture code SQL
ERROR:ORA-01403: no data found
__________________
ours ours !! Au début elle est froide mais après elle est bonne!
pmboutteau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2011, 15h34   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
Il faut toujours essayer de prendre en compte la réalité. Si le programme Pro*C se termine avec 1403 c’est parce que lors dans fetch il n’y pas des données. Ca c’est un fait ! A partir de ce fait il faut chercher l’explication dans le programme en pro*C : ça peut être une erreur de programmation, ça peut être une erreur de connexion à la base (il se connecte à une autre base que celle où vous testez votre requête en sql developer), ça peut être une erreur de type de données, ça peut être une erreur de non compilation du programme, etc.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/05/2011, 09h55   #8
Membre confirmé
 
Avatar de pmboutteau
 
Inscription : février 2005
Messages : 504
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 504
Points : 267
Points : 267
Je vais tester de le recompiler. Il y a eu récemment des soucis de recompilation sur d'autres programmes.
__________________
ours ours !! Au début elle est froide mais après elle est bonne!
pmboutteau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 11h40   #9
Membre confirmé
 
Avatar de pmboutteau
 
Inscription : février 2005
Messages : 504
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 504
Points : 267
Points : 267
La recompilation ne change rien.

ce qui me chiffone c'est que le .pc crée un .c qui contient sur mon FETCH

Code :
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
{
        struct sqlexd sqlstm;
        sqlstm.sqlvsn = 12;
        sqlstm.arrsiz = 6;
        sqlstm.sqladtp = &sqladt;
        sqlstm.sqltdsp = &sqltds;
        sqlstm.iters = (UNSIGNED int  )1;
        sqlstm.offset = (UNSIGNED int  )181;
        sqlstm.selerr = (UNSIGNED short)1;
        sqlstm.cud = sqlcud0;
        sqlstm.sqlest = (UNSIGNED char  *)&sqlca;
        sqlstm.sqlety = (UNSIGNED short)256;
        sqlstm.occurs = (UNSIGNED int  )0;
        sqlstm.sqfoff = (         int )0;
        sqlstm.sqfmod = (UNSIGNED int )2;
        sqlstm.sqhstv[0] = (UNSIGNED char  *)S_select;
        sqlstm.sqhstl[0] = (UNSIGNED long )0;
        sqlstm.sqhsts[0] = (         int  )0;
        sqlstm.sqindv[0] = (         short *)0;
        sqlstm.sqinds[0] = (         int  )0;
        sqlstm.sqharm[0] = (UNSIGNED long )0;
        sqlstm.sqadto[0] = (UNSIGNED short )0;
        sqlstm.sqtdso[0] = (UNSIGNED short )0;
        sqlstm.sqphsv = sqlstm.sqhstv;
        sqlstm.sqphsl = sqlstm.sqhstl;
        sqlstm.sqphss = sqlstm.sqhsts;
        sqlstm.sqpind = sqlstm.sqindv;
        sqlstm.sqpins = sqlstm.sqinds;
        sqlstm.sqparm = sqlstm.sqharm;
        sqlstm.sqparc = sqlstm.sqharc;
        sqlstm.sqpadto = sqlstm.sqadto;
        sqlstm.sqptdso = sqlstm.sqtdso;
        sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
        IF (sqlca.sqlcode == 1403) break;
        IF (sqlca.sqlcode < 0) goto SQL_FIN;
        IF (sqlca.sqlwarn[0] == 'W') sql_error();
}
le sql_error() déclenche mon écriture de trace et donc l'affichage du -01403.

Le problème viendrait-il d'ici?

Code :
1
2
3
IF (sqlca.sqlcode == 1403) break;
        IF (sqlca.sqlcode < 0) goto SQL_FIN;
        IF (sqlca.sqlwarn[0] == 'W') sql_error();
__________________
ours ours !! Au début elle est froide mais après elle est bonne!
pmboutteau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h42   #10
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par pmboutteau Voir le message
...
le sql_error() déclenche mon écriture de trace et donc l'affichage du -01403.

Le problème viendrait-il d'ici?

Code :
1
2
3
IF (sqlca.sqlcode == 1403) break;
        IF (sqlca.sqlcode < 0) goto SQL_FIN;
        IF (sqlca.sqlwarn[0] == 'W') sql_error();
Non.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2011, 14h56   #11
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Comment gerez vous votre boucle FETCH ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh 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 13h09.


 
 
 
 
Partenaires

Hébergement Web