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

MS SQL Server Discussion :

Procédure Stockée et programme externe


Sujet :

MS SQL Server

  1. #1
    Membre régulier Avatar de lelapinou
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2003
    Messages : 96
    Points : 81
    Points
    81
    Par défaut Procédure Stockée et programme externe
    salut à tous.
    Je développe sous Windev, et j'attaque une base SQLServer. Par contre là où je buche, c'est sur la récupération d'une valeur renvoyée par une procédure stockée.

    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
    CREATE 
     
        PROCEDURE [U_AIG].[PR_AIG_ADD_XML_INPUT] 
            @sender varchar(20),
            @xml_type numeric(3,0),
            @xml_data varchar(max)
        AS
     
    	DECLARE	@return_value int,
    			@sequence_value numeric(38, 0)
     
    	BEGIN 
     
    		EXEC	@return_value = [U_REF].[PR_REF_GET_NEXT_SEQUENCE_VALUE]
    				@schema_name = N'U_AIG',
    				@sequence_name = N'S_AIG_INPUT_EVTSUIVI',
    				@sequence_value = @sequence_value OUTPUT
     
            INSERT INTO U_AIG.T_AIG_INPUT
              (
                U_AIG.T_AIG_INPUT.AIG_INPUT_VC_SENDER, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_DT_POSTAGE, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_NB_TRAITE, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_CL_XMLDATA, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_NB_TYPEXML, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_NB_EVTSUIVI
              )
              VALUES 
                (
                  @sender, 
                  getdate(), 
                  0, 
                  @xml_data, 
                  @xml_type, 
                  @sequence_value
                )
     
            IF (@@TRANCOUNT > 0)
                COMMIT WORK
                return @sequence_value
    	END
    je n'ai pas les autorisations de modifier cette procédure, mais j'aimerais savoir si elle est correcte, si elle renvoie bien une valeur numérique, et si oui comment fait on avec un programme externe pour récupérer cette valeur renvoyée.

    Merci de votre aide, et j'espère ne pas m'être trompé de section.
    //-----------------------------------------\\\\
    Peace on Earth
    //-----------------------------------------\\\\

  2. #2
    Membre éclairé
    Avatar de m-mas
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2003
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2003
    Messages : 576
    Points : 719
    Points
    719
    Par défaut
    une procédure ne renvoie pas de valeur mais elle fait un traitemant précis
    il faudra créer une fonction pour avoir le renvoi d'une valeur et utiliser le mot clé Returns ...
    mon blog http://www.3click-solutions.com/actualites/

    MCP VB.NET (70-305) - (70-306) - (70-310)
    Développeur PHP / Wordpress

  3. #3
    Membre régulier Avatar de lelapinou
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2003
    Messages : 96
    Points : 81
    Points
    81
    Par défaut Question de principe
    dans le principe je suis d'accord avec toi sur le fait qu'une procédure ne renvoie normalement pas de valeur.

    mais en pratique c'est tout à fait possible, et c'est la cas ici:

    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
    CREATE 
     
        PROCEDURE [U_AIG].[PR_AIG_ADD_XML_INPUT] 
            @sender varchar(20),
            @xml_type numeric(3,0),
            @xml_data varchar(max)
        AS
     
    	DECLARE	@return_value int,
    			@sequence_value numeric(38, 0)
     
    	BEGIN 
     
    		EXEC	@return_value = [U_REF].[PR_REF_GET_NEXT_SEQUENCE_VALUE]
    				@schema_name = N'U_AIG',
    				@sequence_name = N'S_AIG_INPUT_EVTSUIVI',
    				@sequence_value = @sequence_value OUTPUT
     
            INSERT INTO U_AIG.T_AIG_INPUT
              (
                U_AIG.T_AIG_INPUT.AIG_INPUT_VC_SENDER, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_DT_POSTAGE, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_NB_TRAITE, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_CL_XMLDATA, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_NB_TYPEXML, 
                U_AIG.T_AIG_INPUT.AIG_INPUT_NB_EVTSUIVI
              )
              VALUES 
                (
                  @sender, 
                  getdate(), 
                  0, 
                  @xml_data, 
                  @xml_type, 
                  @sequence_value
                )
     
            IF (@@TRANCOUNT > 0)
                COMMIT WORK
                return @sequence_value
    	END
    si je lis bien c'est une procédure, et elle renvoie @sequence_value. je ne suis pas maître de cettre procédure, et n'ai aucune autorisation de modification, mais elle est ainsi faite et fonctionne parfaitement.
    Par contre c'est moi qui ne parvient pas à trouver la syntaxe pour récupérer cette @sequance_value
    //-----------------------------------------\\\\
    Peace on Earth
    //-----------------------------------------\\\\

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Procédure Stockée et programme externe
    Bonjour,

    Normalement tu exécutes ta ps via les fonctions qui vont bien de windev : exec ma_ps et, ensuite tu récupères la valeur renvoyée comme tu le ferais avec une simple requête SQL (tu parcours un recordset).

    Cordialement,

    Nicolas

  5. #5
    Membre régulier Avatar de lelapinou
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2003
    Messages : 96
    Points : 81
    Points
    81
    Par défaut Exactement
    J'ai exactement fait cela, mais mon fetch ne m'apporte rien du tout.
    ALors j'ai réalisé ceci:
    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
     
    sMyInPut			est une chaîne ="EXECUTE U_AIG.PR_AIG_ADD_XML_INPUT 'ITEMTRANS',5,'"+sMyXMLInput+"'"						      
    nResultat			est un entier
     
     
     
    SI PAS SQLExec(sMyInPut,sNomRequete) ALORS
    	SQLInfoGene(sNomRequete)
    	Erreur(SQL.MesErreur)
    	SQLFerme(sNomRequete)
    SINON
    	TANTQUE SQLFetch(sNomRequete) = 0
    		nResultat = Val(SQLLitCol(sNomRequete,1))
    	FIN
    	SQLFerme(sNomRequete)
    FIN
    ce code me renvoi rien, car le fetch ne parcours rien, ce qui voudrait dire que la procédure ne renvoie rien.
    Alors j'ai fais ainsi :
    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
     
    sMyInPut			est une chaîne ="DECLARE @sequence_value int; EXECUTE U_AIG.PR_AIG_ADD_XML_INPUT 'ITEMTRANS',5,'"+sMyXMLInput+"'; SELECT @sequence_value;"
     
    nResultat			est un entier
     
    SI PAS SQLExec(sMyInPut,sNomRequete) ALORS
    	SQLInfoGene(sNomRequete)
    	Erreur(SQL.MesErreur)
    	SQLFerme(sNomRequete)
    SINON
    	TANTQUE SQLFetch(sNomRequete) = 0
    		nResultat = Val(SQLLitCol(sNomRequete,1))
    	FIN
    	SQLFerme(sNomRequete)
    FIN
    et ce code me renvoie 0 mais le Fetch est parcouru.
    Bref je galère je n'y parviens pas.
    //-----------------------------------------\\\\
    Peace on Earth
    //-----------------------------------------\\\\

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Mmmmh désolé, j'ai été un peu rapide dans ma réponse, en fait pour récupérer ta valeur de façon "classique" comme si c'était un recordset il faut que tu remplaces (si tu peux) le "RETURN @sequence_value" par "SELECT @sequence_value". En tout cas, c'est ce que je fais quand je dois récupérer une variable / valeur de retour d'une ps. Je ne vois pas comment faire autrement...

    Cordialement,

    Nicolas

  7. #7
    Membre régulier Avatar de lelapinou
    Homme Profil pro
    Inscrit en
    Avril 2003
    Messages
    96
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Avril 2003
    Messages : 96
    Points : 81
    Points
    81
    Par défaut c'estlà que le bas blesse!!!
    Je ne peux justement pas faire cette modification. Et elle ne sera pas faite.
    Mais ce n'est pas grave, je me suis débrouillé autrement.


    Merci à tous les posters!
    //-----------------------------------------\\\\
    Peace on Earth
    //-----------------------------------------\\\\

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/10/2010, 12h16
  2. [Firebird 2.1]Procédures stockées externes?
    Par O Oøps O dans le forum SQL
    Réponses: 1
    Dernier message: 19/05/2009, 16h22
  3. Extension procédure stockée externe
    Par O Oøps O dans le forum Extensions
    Réponses: 0
    Dernier message: 15/04/2009, 10h01
  4. Réponses: 1
    Dernier message: 09/04/2008, 16h48
  5. procédure stockée externe
    Par sergioorlando dans le forum Langage SQL
    Réponses: 4
    Dernier message: 20/03/2007, 17h17

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