IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Forms Oracle Discussion :

Problème requête avec variables sous forms


Sujet :

Forms Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 31
    Points
    31
    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 : 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

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    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.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 31
    Points
    31
    Par défaut
    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

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 32
    Points : 19
    Points
    19
    Par défaut
    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.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2005
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 58
    Points : 31
    Points
    31
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème requête avec récupération de variables via post
    Par jbidou88 dans le forum XQUERY/SGBD
    Réponses: 4
    Dernier message: 05/05/2012, 23h18
  2. problème requète avec les dates sous sql server
    Par fayabones dans le forum Développement
    Réponses: 2
    Dernier message: 04/06/2009, 22h27
  3. [Macro] Problème avec variable sous Mainframe
    Par benjisan dans le forum Macro
    Réponses: 2
    Dernier message: 28/11/2008, 13h45
  4. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10
  5. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo