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

Développement SQL Server Discussion :

Problème procédures imbriquées


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Problème procédures imbriquées
    Bonjour,

    J'ai un problème avec une procédure stockée sous MS SQL 2017.
    J'ai créé une première procédure procfin_van_paiements avec le script :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE PROCEDURE procfin_van_paiements(
    	@dosId INT,
    	@taux DECIMAL(18,8), 
    	@ValeurActuelleNet DECIMAL(18,8) OUTPUT
    )
    AS
    BEGIN
    ....


    Quand j'exécute cette procédure avec l'instruction suivante, elle fonctionne très bien
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    DECLARE @retour_van DECIMAL(18,8)
    EXECUTE procfin_van_paiements @dosId = 334751, @taux = 0, @ValeurActuelleNet = @retour_van OUTPUT

    --> @retour_van = 3157

    J'ai ensuite créé une deuxième procédure qui doit notamment exécuter la première 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
    CREATE PROCEDURE procfin_tri_paiements(
    	@dosId INT,
    	@dPrecision DECIMAL(6,5),
    	@retour DECIMAL(18,8) OUTPUT
    	) 
    AS
    BEGIN
    	DECLARE @var_x1 DECIMAL(18,8);
    	SET @var_x1 = 0;
    	DECLARE @var_f1 DECIMAL(18,8);
    	SET @var_f1 = 0;
     
    	EXECUTE procfin_van_paiements @dosId, @var_x1, @var_f1 OUTPUT;
    	PRINT 'var_f1 ' + CONVERT(VARCHAR, @var_f1);
    ...

    Et là, la première procédure ne fonctionne pas. J'ai @var_f1 = 0.

    Est-ce que quelqu'un sait d'où peut venir le problème ?

    Merci beaucoup pour votre aide.

  2. #2
    Rédacteur

    Simplifions au maximum vos procédures :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROCEDURE procfin_van_paiements 
        @dosId INT,
        @taux DECIMAL(18,8),
        @ValeurActuelleNet DECIMAL(18,8) OUTPUT
    AS
    SET @ValeurActuelleNet = 123;
    GO


    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE PROCEDURE procfin_tri_paiements
        @dosId INT,
        @dPrecision DECIMAL(6,5),
        @retour DECIMAL(18,8) OUTPUT
     
    AS
    DECLARE @var_f1 DECIMAL(18,8) = 0;
    EXECUTE procfin_van_paiements 1, 2, @var_f1 OUTPUT;
    PRINT @var_f1;
    GO


    Test :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    EXEC procfin_tri_paiements 1, 2, 3


    Resultat :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    123.00000000


    Il n'y a donc pas de problème.... Regardez donc dans le code que vous n'avez pas publié !

    A +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre à l'essai
    Merci beaucoup pour la réponse.
    Le problème c'est que la procédure procfin_van_paiements me renvoie bien 123 quand elle est exécutée directement mais quand elle est exécutée dans la procédure procfin_tri_paiements, elle me renvoie toujours 0 et jamais 123.

  4. #4
    Expert éminent
    Quand je lis ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    DECLARE @retour_van DECIMAL(18,8)
    EXECUTE procfin_van_paiements @dosId = 334751, @taux = 0, @ValeurActuelleNet = @retour_van OUTPUT


    Je ne sais pas ce que renvoie la procédure, mais je doute que ce soit la valeur contenur dans "@retour_van"
    On ne jouit bien que de ce qu’on partage.

  5. #5
    Rédacteur

    Vous avez effectivement inversé les paramètres…

    A +
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  6. #6
    Membre à l'essai
    Merci pour la réponse

###raw>template_hook.ano_emploi###