Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
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 20/06/2008, 10h41   #1
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 56
Points : 11
Points : 11
Par défaut Problème requête avec variables sous forms

Salut a tous,

je debute en PL/SQL, et j'apprends sur le tas (grace a l'appli deja existante), mais j'ai un probleme incomprehensible pour une requete sous Forms
je bosse avec oracle 9i et forms developper 6


Code :
1
2
3
SELECT count(*) INTO Var_Cpt_IDMOT FROM Ipl_Mot I, Mot M
WHERE I.id_ipl_message IN (SELECT id_ipl_message FROM ipl_message WHERE id_sys = Var_sys2)
AND I.Id_Mot = M.Id_Mot AND num_mot||' '||code_proto = Var_Mot_Num_Mot_Code_Proto  ;
Var_Cpt_IDMOT est un number
Var_sys2 est un number qui contient 1392
Var_Mot_Num_Mot_Code_Proto est un varchar2(50) qui contient 'J28.4I ' (sans les quotes)

cette requete qui est censée me retourner 1 dans Var_Cpt_IDMOT me retourne 0

alors que lorsque j'execute la requete en dure (donc le contenu des variables a la place des variables) ca me renvoit bien 1
Code :
1
2
3
SELECT count(*) INTO Var_Cpt_IDMOT FROM Ipl_Mot I, Mot M
WHERE I.id_ipl_message IN (SELECT id_ipl_message FROM ipl_message WHERE id_sys = 1392)
AND I.Id_Mot = M.Id_Mot AND num_mot||' '||code_proto = 'J28.4I ';
pareil lorsque je l'execute sous SQL plus, ca me renvoit bien 1

j'ai essayé de mettre des quotes autour du J28.4I pour que ca donne bien 'J28.4I ' mais ca ne change rien....
Code :
Var_Mot_Num_Mot_Code_Proto := '''' || Var_Mot_Num_Mot_Code_Proto || '''';
Voici le code de ma procedure

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Var_Cpt :=0;
	Open CMess;
	Loop
	Begin
		Fetch CMess INTO Var_Message_Id_Message,Var_Message_Num_Message, Var_Message_Emi, Var_Message_Rec, Var_Message_Id_Ipl_Message;
		Exit when CMess%NOTFOUND;
 
		SELECT Emi_message, Rec_Message INTO Var_Message_Emi2,Var_Message_Rec2 FROM Ipl_Message I, Message M
		WHERE Id_SYS = Var_sys2 AND I.Id_Message = M.Id_Message AND Num_Message = Var_Message_Num_Message;
 
		INSERT INTO ipl_test_2 VALUES(Var_Cpt,Var_Message_Num_Message,'NULL','NULL','NULL', Var_Message_Emi, Var_Message_Rec, Var_Message_Emi2, Var_Message_Rec2,0);
		Var_Cpt :=Var_Cpt+1;
		Open CMot;
		Loop
		Begin
			Fetch CMot INTO Var_Mot_id_Message,Var_Mot_Num_Mot,Var_Mot_Code_proto,Var_Mot_Num_Mot_Code_Proto,Var_Mot_Id_Ipl_Mot,Var_Mot_Id_Mot,Var_Mot_Emission,Var_Mot_Reception;
			Exit when CMot%NOTFOUND;
			Var_Mot_Num_Mot_Code_Proto := '''' || Var_Mot_Num_Mot_Code_Proto || ''''; 
 
--cette requete qui suit marche pas, ce qui precede marche correctement
			SELECT count(*) INTO Var_Cpt_IDMOT FROM Ipl_Mot I, Mot M
			WHERE I.id_ipl_message IN (SELECT id_ipl_message FROM ipl_message WHERE id_sys = Var_sys2)
			AND I.Id_Mot = M.Id_Mot AND num_mot||' '||code_proto = Var_Mot_Num_Mot_Code_Proto  ;		
 
			Var_Mot_Emission2 :='-';
			Var_Mot_Reception2 :='-';
			Dbg( 'cpt= ' ||Var_Cpt || ' Var_cpt_IDMOT=' || Var_Cpt_IDMOT || ' codeproto= a' || Var_Mot_Num_Mot_Code_Proto ||'a');
 
			IF (Var_Cpt_IDMOT>0) 
				then
				Dbg( 'plop2');
				SELECT Emi_Mot,Rec_Mot INTO Var_Mot_Emission2, Var_Mot_Reception2 FROM Ipl_Mot I, Mot M
				WHERE	I.id_ipl_message IN (SELECT id_ipl_message FROM ipl_message WHERE id_sys = :ID_SYS2)
				AND	I.Id_Mot = M.Id_Mot AND	Num_mot||' '||code_proto = Var_Mot_Num_Mot_Code_Proto;
				Dbg( 'plop3');
			end IF;
 
			IF ( Var_Mot_Emission2 IS NULL ) Then Var_Mot_Emission2 := 'TBD'; End IF;
			IF ( Var_Mot_Reception2 IS NULL ) Then Var_Mot_Reception2 := 'TBD'; End IF;
 
			INSERT INTO ipl_test_2 VALUES(Var_Cpt,Var_Message_Num_Message,Var_Mot_Num_Mot,'NULL','NULL', Var_Mot_Emission,Var_Mot_Reception, Var_Mot_Emission2, Var_Mot_Reception2,1);
			Var_Cpt :=Var_Cpt+1;
 
 
 
		End;
		End Loop;
		Close CMot;
 
 
	End;
	End Loop;
	Close CMess;
en passant, lorsque je met le code en dur, (donc que ca me renvoit bien 1) le select qui se trouve dans le IF (Var_Cpt_IDMOT>0) n'a pas l'air de s'executer, ou tout du moins, ce qui suit ne s'execute pas, mais je ne me suis pas penché vraiment dessus vu que ce qu'il y a avant ne marche pas vraiment
un probleme d'un loop dans un loop (ca serait con, j'en ai encore 2 autres a faire apres ) ??

PS: les cursors et variables sont apparemment definis correctement, donc je ne les ai pas remis.

merci a vous si vous avez une petite idée, car la moi j'en ai plus

PS2: j'hesitais a le mettre dans ce forum ou directement dans PL/SQL, donc excusez moi si je me suis trompé

mike
mikeOSX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 11h45   #2
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 534
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 534
Points : 6 471
Points : 6 471
Votre requête en dur : 'J28.4I ' contient un espace en fin, alors que votre variable n'en contient pas. C'est peut-être l'origine du problème.
__________________
Rédacteur Oracle (Oracle ACE)
Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
Je ne réponds pas aux questions techniques par MP
Blogs: Forms-PL/SQL-J2EE - Forms Java Beans
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 12h46   #3
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 56
Points : 11
Points : 11
non, c'est normal, c'est en fait la concatenation entre num_mot et code_proto.
mais apparemment, code proto est vide, ce qui fait finir par un espace.

mais meme si a la place d'un espace, je met un autre caractere, ca ne change rien
mikeOSX est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 13h45   #4
Invité régulier
 
Inscription : septembre 2007
Messages : 32
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 32
Points : 8
Points : 8
Je parie que tu n'es pas connecté sous le même identifiant que sous SQL Plus. Sinon, c'est sans doute une question de COMMIT manquant. Quand une requête ne renvoie pas la même chose entre Forms et SQL Plus, c'est toujours une raison de ce genre.

En passant, quand tu as des comportements un peu zarbis sous Forms 6, il y a un truc à connaître : toujours faire un Compile All (Ctrl+Shift+K) avant de faire ta génération (Ctrl-T). Ça devient un réflexe.
Grizzzly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2008, 14h48   #5
Candidat au titre de Membre du Club
 
Inscription : mars 2005
Messages : 56
Détails du profil
Informations forums :
Inscription : mars 2005
Messages : 56
Points : 11
Points : 11
merci pour vos reponses

quelques infos:
-j'ai en fait repris ces requetes a partir d'un report, et elles fonctionnent (dans le report).
-Je suis bien connecté sous les memes identifiants dans SQL plus et sous forms.
-j'avais testé a la place de l'espace de mettre un autre caractere, ca ne fonctionnait pas.
-les commit, j'en avais rajouté dans mon code, mais ca ne changeait rien.
-la variable Var_Mot_Num_Mot_Code_Proto je la recupere d'un curseur, qui vient aussi de la concatenation de : num_mot||' '||code_proto (donc pour ca que l'espace ne me posait pas de problemes, vu que je recuperais et testait la meme concatenation)

je viens de retester petit a petit la requete, et on dirait qu'il n'aime pas l'espace .
apres avoir tout recompilé (j'ai du oublier de le faire quand j'ai testé avec un autre caractere a la place de l'espace) avec un _ a la place de l'espace, ca fonctionne.
Je vais donc essayer de me debrouiller comme ca.

pour ce qui est de la 2eme partie apres, elle refonctionne, vu que j'ai recupéré cette requete d'un reports, j'avais oublié de modifier :ID_SYS2 en Var_sys2
copier coller quand tu nous tiens

mais si quelqu'un a une idée de pourquoi sous reports cette requete (avec l'espace) fonctionne , mais sous forms, ca ne marche pas, j'aimerai bien savoir

merci
mikeOSX 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 02h49.


 
 
 
 
Partenaires

Hébergement Web