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

SQL Firebird Discussion :

Procedure stockée de mise à jour


Sujet :

SQL Firebird

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 34
    Points : 35
    Points
    35
    Par défaut Procedure stockée de mise à jour
    Je veux mettre une table à jour à partir d'une procédure stockée exploitant une autre procédure stockée.
    Est ce possible ?

    Code

    Cette procédure marche Bien !

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    SET TERM !! ;
    CREATE PROCEDURE PS_ART_VTS (ADH_NU INTEGER, ART_NU INTEGER, MAG_NU INTEGER, DT_MINI DATE, DT_MAXI DATE)
    	RETURNS (
            VTS_QTE_01 Integer,
            VTS_QTE_02 Integer,
            VTS_QTE_03 Integer,
            VTS_QTE_04 Integer,
            VTS_QTE_05 Integer,
            VTS_QTE_06 Integer,
            VTS_QTE_07 Integer,
            VTS_QTE_08 Integer,
            VTS_QTE_09 Integer,
            VTS_QTE_10 Integer,
            VTS_QTE_11 Integer,
            VTS_QTE_12 Integer,
            VTS_QTE_13 Integer,
            VTS_QTE_TOTAL Integer,
            VTS_PV_TOTAL Float,
            VTS_PV_JOUR_TOTAL Float,
            VTS_PA_JOUR_TOTAL Float
            )
    	AS
    	BEGIN
    	     FOR SELECT
                     Sum(VTS_QTE_01),
                     Sum(VTS_QTE_02),
                     Sum(VTS_QTE_03),
                     Sum(VTS_QTE_04),
                     Sum(VTS_QTE_05),
                     Sum(VTS_QTE_06),
                     Sum(VTS_QTE_07),
                     Sum(VTS_QTE_08),
                     Sum(VTS_QTE_09),
                     Sum(VTS_QTE_10),
                     Sum(VTS_QTE_11),
                     Sum(VTS_QTE_12),
                     Sum(VTS_QTE_13),
                     Sum(VTS_QTE_01)+
                     Sum(VTS_QTE_02)+
                     Sum(VTS_QTE_03)+
                     Sum(VTS_QTE_04)+
                     Sum(VTS_QTE_05)+
                     Sum(VTS_QTE_06)+
                     Sum(VTS_QTE_07)+
                     Sum(VTS_QTE_08)+
                     Sum(VTS_QTE_09)+
                     Sum(VTS_QTE_10)+
                     Sum(VTS_QTE_11)+
                     Sum(VTS_QTE_12)+
                     Sum(VTS_QTE_13),
                     Sum(VTS_PV_TOTAL),
                     Sum(VTS_PV_JOUR),
                     Sum(VTS_PA_JOUR)
     
    	         FROM ART_VTS
                     WHERE (ADH_NUMERO = :ADH_NU) And (ART_NUMERO = :ART_NU) And (MAG_NUMERO = :MAG_NU) And ( 
     
    VTS_DATE>= :DT_MINI) And ( VTS_DATE<= :DT_MAXI)
    	         INTO
                     :VTS_QTE_01,
                     :VTS_QTE_02,
                     :VTS_QTE_03,
                     :VTS_QTE_04,
                     :VTS_QTE_05,
                     :VTS_QTE_06,
                     :VTS_QTE_07,
                     :VTS_QTE_08,
                     :VTS_QTE_09,
                     :VTS_QTE_10,
                     :VTS_QTE_11,
                     :VTS_QTE_12,
                     :VTS_QTE_13,
                     :VTS_QTE_TOTAL,
                     :VTS_PV_TOTAL,
                     :VTS_PV_JOUR_TOTAL,
                     :VTS_PA_JOUR_TOTAL
                 DO
                 BEGIN
                   SUSPEND;
                   EXIT;
                 END
     
    END !!
     
    SET TERM ; !!
    Cette procedure ne marche pas, et je sais pas pourqoi !!!
    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
    SET TERM !! ;
    CREATE PROCEDURE TMP_VTS (DT_MINI DATE, DT_MAXI DATE)
    	AS
    	BEGIN
    	     FOR SELECT * FROM ART_VTS A WHERE (VTS_DATE>= :DT_MINI) And ( VTS_DATE<= :DT_MAXI)
                 DO
                 BEGIN
                      EXECUTE PROCEDURE PS_ART_VTS(A.ADH_NUMERO, A.ART_NUMERO, A.MAG_NUMERO, :DT_MINI, : DT_MAXI);
     
                      Update TMP_ART_ETUDE Set
                      VTS_QT_01= VTS_QTE_01
                      Where
                      ADH_NUMERO= A.ADH_NUMERO And
                      ART_NUMERO= A.ART_NUMERO And
                      MAG_NUMERO= A.MAG_NUMERO;
                 END;
     
    END !!
    SET TERM ; !!
    Merci beaucoup de votre aide !


  2. #2
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 70
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    Ton erreur se situe au niveau de execute procedure. Ta variable VTS_QTE_01 n'est pas déclarée et tu ne recupère pas ta valeur de ta fonction.

    Ça devrait mieux marcher comme ça


    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
     
    SET TERM !! ; 
    CREATE PROCEDURE TMP_VTS (DT_MINI DATE, DT_MAXI DATE) 
    AS 
    declare variable sValeur integer;
    BEGIN 
    FOR SELECT * FROM ART_VTS A WHERE (VTS_DATE>= :DT_MINI) And ( VTS_DATE<= :DT_MAXI) 
    DO 
    BEGIN 
    EXECUTE PROCEDURE PS_ART_VTS(A.ADH_NUMERO, A.ART_NUMERO, A.MAG_NUMERO, :DT_MINI, : DT_MAXI) returning_values (sValeur); 
     
    Update TMP_ART_ETUDE Set 
    VTS_QT_01= sValeur
    Where 
    ADH_NUMERO= A.ADH_NUMERO And 
    ART_NUMERO= A.ART_NUMERO And 
    MAG_NUMERO= A.MAG_NUMERO; 
    END; 
     
    END !! 
    SET TERM ; !!
    Je crois que ça devrais mieux passer ainsi. pour returning_values, je n'ai pas mis toutes les valeurs.

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Moi je dirai que le probleme vient aussi du For select * qui en plus n'a pas de into.
    Et que les variables hotes ne sont pas déclarées, que l'on ne peux utiliser A.ADH_NUMERO, A.ART_NUMERO, A.MAG_NUMERO autre part que dans le select ou A est defini.
    Et qu'il faut que tous les paramètres de sortie de la procédure appelée soient utilisées.
    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
    SET TERM !! ; 
    CREATE PROCEDURE TMP_VTS (DT_MINI DATE, DT_MAXI DATE) 
    AS 
    declare variable VTS_QTE_01 Integer;
    declare variable VTS_QTE_02 Integer; 
    declare variable VTS_QTE_03 Integer; 
    declare variable VTS_QTE_04 Integer; 
    declare variable VTS_QTE_05 Integer; 
    declare variable VTS_QTE_06 Integer; 
    declare variable VTS_QTE_07 Integer; 
    declare variable VTS_QTE_08 Integer; 
    declare variable VTS_QTE_09 Integer; 
    declare variable VTS_QTE_10 Integer; 
    declare variable VTS_QTE_11 Integer; 
    declare variable VTS_QTE_12 Integer; 
    declare variable VTS_QTE_13 Integer; 
    declare variable VTS_QTE_TOTAL Integer;
    declare variable VTS_PV_TOTAL Float;
    declare variable VTS_PV_JOUR_TOTAL Float;
    declare variable VTS_PA_JOUR_TOTAL Float; 
    BEGIN 
    FOR SELECT A.ADH_NUMERO, A.ART_NUMERO, A.MAG_NUMERO FROM ART_VTS A WHERE (VTS_DATE>= :DT_MINI) And ( VTS_DATE<= :DT_MAXI) 
    into :ADH_NUMERO, :ART_NUMERO, :MAG_NUMERO
    DO 
    BEGIN 
    EXECUTE PROCEDURE PS_ART_VTS(:ADH_NUMERO, :ART_NUMERO, :MAG_NUMERO, :DT_MINI, : DT_MAXI)
    returning_values :VTS_QTE_01, :VTS_QTE_02, :VTS_QTE_03, :VTS_QTE_04, :VTS_QTE_05, :VTS_QTE_06, :VTS_QTE_07, :VTS_QTE_08, :VTS_QTE_09, :VTS_QTE_10, :VTS_QTE_11, :VTS_QTE_12, :VTS_QTE_13, :VTS_QTE_TOTAL, :VTS_PV_TOTAL, :VTS_PV_JOUR_TOTAL, :VTS_PA_JOUR_TOTAL; 
     
    Update TMP_ART_ETUDE Set 
    VTS_QT_01= :VTS_QTE_01 
    Where 
    ADH_NUMERO= :ADH_NUMERO And 
    ART_NUMERO= :ART_NUMERO And 
    MAG_NUMERO= :MAG_NUMERO; 
    END; 
     
    END !! 
    SET TERM ; !!

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    J'ai corrigé le code mais je n'arrive pas à créer ma procédure !

    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
    54
    55
    56
    57
    58
     
    SET TERM !! ;
    CREATE PROCEDURE TMP_VTS (DT_MINI DATE, DT_MAXI DATE)
    	AS
            declare variable VTS_QTE_01 Integer;
            declare variable VTS_QTE_02 Integer;
            declare variable VTS_QTE_03 Integer;
            declare variable VTS_QTE_04 Integer;
            declare variable VTS_QTE_05 Integer;
            declare variable VTS_QTE_06 Integer;
            declare variable VTS_QTE_07 Integer;
            declare variable VTS_QTE_08 Integer;
            declare variable VTS_QTE_09 Integer;
            declare variable VTS_QTE_10 Integer;
            declare variable VTS_QTE_11 Integer;
            declare variable VTS_QTE_12 Integer;
            declare variable VTS_QTE_13 Integer;
            declare variable VTS_QTE_TOTAL Integer;
            declare variable VTS_PV_TOTAL Float;
            declare variable VTS_PV_JOUR_TOTAL Float;
            declare variable VTS_PA_JOUR_TOTAL Float;
    	BEGIN
    	     FOR SELECT A.ADH_NUMERO, A.ART_NUMERO, A.MAG_NUMERO FROM TMP_ART_ETUDES A
                     WHERE (VTS_DATE>= :DT_MINI) And ( VTS_DATE<= :DT_MAXI)
                 DO
                 BEGIN
     
                      EXECUTE PROCEDURE PS_ART_VTS(A.ADH_NUMERO, A.ART_NUMERO, A.MAG_NUMERO, :DT_MINI, : DT_MAXI) returning_values
                      (
                       VTS_QTE_01 ,
                       VTS_QTE_02 ,
                       VTS_QTE_03 ,
                       VTS_QTE_04 ,
                       VTS_QTE_05 ,
                       VTS_QTE_06 ,
                       VTS_QTE_07 ,
                       VTS_QTE_08 ,
                       VTS_QTE_09 ,
                       VTS_QTE_10 ,
                       VTS_QTE_11 ,
                       VTS_QTE_12 ,
                       VTS_QTE_13 ,
                       VTS_QTE_TOTAL ,
                       VTS_PV_TOTAL ,
                       VTS_PV_JOUR_TOTAL ,
                       VTS_PA_JOUR_TOTAL 
                       );
     
                      Update TMP_ART_ETUDE Set
                      VTS_QT_01= :VTS_QTE_01
                      Where
                      ADH_NUMERO= A.ADH_NUMERO And
                      ART_NUMERO= A.ART_NUMERO And
                      MAG_NUMERO= A.MAG_NUMERO;
                 END;
     
    END !!
    SET TERM ; !!
    Ou est l'erreur ?

    Merci


  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 34
    Points : 35
    Points
    35
    Par défaut
    Merci à tous cela marche Maintenant


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

Discussions similaires

  1. [MySQL5] Procédures Stockées de Mise à jour
    Par Shinn77 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/10/2007, 14h17
  2. où sont stockés les mises à jour de windows
    Par yesil08 dans le forum Windows XP
    Réponses: 5
    Dernier message: 12/08/2007, 19h42
  3. Réponses: 3
    Dernier message: 18/07/2007, 17h20
  4. Réponses: 2
    Dernier message: 05/12/2005, 16h39
  5. Procedure Stocké et mise à jour de ligne
    Par Andry dans le forum SQL
    Réponses: 2
    Dernier message: 26/11/2004, 10h22

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