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

Bases de données Delphi Discussion :

Procedure Stockée et OUTPUT


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 50
    Par défaut Procedure Stockée et OUTPUT
    bonjour à tous,

    Je galère encore sur les PS...

    Pourriez vous me dire :
    1/ Pourquoi cette PS ne fonctionne pas
    2/ Pourquoi attend t'elle des paramètres d'entrées à l'execution !?

    Obectif : Récupérer tous les enreg. de la table Articles avec 3 champs :
    référence, stock et un troisième qui n'existe pas mais qui contient une chaine de caractères conditionnée ('OK' ou 'PAS OK').

    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
    ALTER PROCEDURE test4
     
     
    (@St int,
    @Statut nchar(20) output)
     
     
    AS
        SELECT référence,
                   @St= stock
        from articles
     
    BEGIN
     
     if  @St<200
     select @Statut='OK'
     else
     select @Statut='PAS OK'
     
    END
    Merci de votre aide, Cyrille.

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    Le SELECT doit se trouver entre le BEGIN et END de la procédure, pas après le AS.

    Code sql : 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
    ALTER PROCEDURE test4
     
    (@St int,
    @Statut nchar(20) output)
     
    AS
     
    BEGIN
        SELECT référence,
                   @St= stock
        from articles
     
     if  @St<200
     select @Statut='OK'
     else
     select @Statut='PAS OK'
     
    END

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 50
    Par défaut
    Désolé, ça ne marche pas.
    Voici le message d'erreur : Une instruction SELECT qui affecte une valeur à une variable ne doit pas être combinée avec des opérations d'extraction de données.

    De plus, je doit ecrire : execute Test4 XX,XX pour la lancer !!! Je ne comprends pas. il n'y a pas de parmatres d'entrées.

    Qu'est ce qui m'echappe ?

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bien sûr que si qu'il y a des paramètres d'entrées !

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER PROCEDURE test4 (@St int, @Statut nchar(20) output)

    Dont un qui est en sortie justement donc tu dois déclarer une variable avant l'exécution de ta requête qui va recevoir cette valeur de sortie soit :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DECLARE @SORTE AS NChar(20)
     
    EXEC test4( 10, @SORTE OUTPUT )
     
    SELECT @OUTPUT

    Enfin pour la première erreur que tu cites c'est parce qu'il faut remplacer les SELECT par des SET.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    IF  @St<200
      SET @Statut='OK'
    else
       SET @Statut='PAS OK'

  5. #5
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    En fait, ce que tu veux c'est :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    alter procedure Test4
    as
      select
        [Référence],
        [Stock],
        [Status] = case when Stock < 200 then 'OK' else 'PAS OK' end
      from articles

    Visiblement, tu mélanges plusieurs choses :
    - Ce que tu déclares entre parenthèse après le nom de la SP, ce sont des paramètres d'appels. Donc des paramètres qu'il faut renseigner au moment de l'appel. Dans ta SP, tu sembles utiliser ces paramètres comme des variables locales de la SP.
    - Si tu as besoin de variables locales dans la SP, il faut les déclarer avec DECLARE dans le corps de la SP (donc après le AS).
    - Le mot clé SELECT peut avoir plusieurs usages :
    * Tu fais un SELECT normal au sens SQL du terme. Dans ce cas, tu va renvoyer un jeu de résultats à l'appelant.
    * Tu peux aussi t'en servir pour affecter une valeur à une ou plusieurs variables (select @MaVariable1 = UneValeur, @MaVariable2 = Valeur2). Dans ce cas, il vaut mieux que ton select retourne une et une seule ligne. Et tu dois obligatoirement affecter tous les champs retournés par le select à une variable.
    * Tu n'as pas le droit de faire un select qui retourne à la fois des champs et qui fait des affectations à une variable.

    Depuis MSSQL 7, Si tu veux simplement affecter une valeur immédiate à une variable et que cette valeur ne provient pas d'un calcul à partir d'une valeur d'une table, tu peux l'affecter directement avec le mot clé SET, au lieu d'utiliser SELECT :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set @MaVariable = 5

Discussions similaires

  1. Parametre output avec procedure stocké
    Par el_quincho dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/11/2006, 20h46
  2. Procedure stockée avec un parametre en OUTPUT
    Par Nadaa dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/09/2004, 20h06
  3. procedure stockée champ date
    Par tripper.dim dans le forum SQL
    Réponses: 5
    Dernier message: 25/04/2003, 09h47
  4. Appel a une procedure stockée en vba
    Par The_Nail dans le forum VBA Access
    Réponses: 36
    Dernier message: 01/04/2003, 16h44
  5. procedure stockée dans un dbbatch
    Par pram dans le forum XMLRAD
    Réponses: 4
    Dernier message: 07/02/2003, 16h35

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