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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
Var_Mot_Num_Mot_Code_Proto := '''' || Var_Mot_Num_Mot_Code_Proto || '''';
Voici le code de ma procedure

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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