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 :

creation de procedures


Sujet :

MS SQL Server

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut creation de procedures
    Bonjour je dois créer une procédure en ms-sql-server mais je galère trop je ne sais pas par ou commancer.

    le schéma de ma bdd est le suivant:

    Base de Données de COMMANDES0N
    Client (Nocli, CTotMont, NbCom)
    Produit (Noprod, Pxunit, Qtestk)
    Commande (Nocom, Montcom, Nocli)
    Ligne(Nocom, Nordre, Qtecom, Puacc, Noprod, Monttligne)

    et je dois écrire la procédure suivante:
    Écrire une procédure pr_insert_ligne qui insère une ligne de commande dans
    laquelle le prix unitaire accordé(Puacc) est égal au prix unitaire dans Produit(Pxunit) diminué
    d’un % donné (paramètre). Cette procédure doit en appeler une autre
    (pr_getprix).

    Quelqu'un pourrait-il m'aider a commancer et surtout a comprendre comment raisoner pour creeer cette procedure?
    Merci a vous

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    et bien déjà commence par pr_getprix() et pose toi les questions suivantes :
    1°) que doit faire cette procédure ? (vu son nom, j'aurais plutôt dit que c'était une fonction, n'est-elle pas censée retourner un prix ?)
    2°) que dois-je mettre en entrée pour que la procédure / fonction me renvoie le prix que je veux
    3°) quoi programmer pour qu'entre les paramètres mis en entrées et la sortie, elle me fasse ce que je veux ? (un select...)

    allez je suis sympa, voila comment on déclare une procédure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE PROCEDURE <Procedure_Name, sysname, ProcedureName> 
    	<@Param1, sysname, @p1> <Datatype_For_Param1, , int> = <Default_Value_For_Param1, , 0>, 
    	<@Param2, sysname, @p2> <Datatype_For_Param2, , int> = <Default_Value_For_Param2, , 0>
    AS
    BEGIN
    	SET NOCOUNT ON;
     
     
    END
    GO
    et voila pour une fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE FUNCTION <Scalar_Function_Name, sysname, FunctionName> 
    (
    	<@Param1, sysname, @p1> <Data_Type_For_Param1, , int>
    )
    RETURNS <Function_Data_Type, ,int>
    AS
    BEGIN
     
     
    END
    GO

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut
    Ben pour ce qui est des "function" je dois oublier. Je dois travailler avec des procedures stockees. j'ai crée une procédure qui retourne le prix d'un produit donnée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create procedure pr_getprix (@numero_produit int, @prix smallmoney output)
    	as
    		select @prix = produit.Pxunit
    			from produit
    			where Noprod = @numero_produit
     
    declare @prix smallmoney
    exec pr_getprix 12, @prix output
    select @prix
    mais j'ai de la misère à creer ma prodedure pr_insert_ligne

  4. #4
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    une procédure ne renvoie rien : ton @prix_output me semble douteux.

    j'ai vu beaucoup de code Sybase (Du transact-sql où on ne peut pas faire de fonctions) où les procédures écrivaient leurs résultats dans des tables temporaires

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create table tmp_pr_getprix(prix numeric(15,3))
    exec pr_getprix 12
    SELECT prix from tmp_pr_getprix
    truncate table tmp_pr_getprix
    drop table tmp_pr_getprix

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    une procédure ne renvoie rien : ton @prix_output me semble douteux.
    Sur le principe je suis entièrement d'accord avec vous.
    En revanche sous SQL Server on peut tout à fait renvoyer une valeur en OUTPUT comme dans l'exemple de fasyr

    fasyr, où butez-vous ?

    Dans le code de votre procédure d'insertion, vous passer en paramètre Pxunit.
    Pour calculer le Puacc en fonction du pourcentage que vous passez en paramètre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT @puacc = (@Pxunit * @pourcentage) / 100
     
    INSERT INTO maTable
    (
    	...,
    	puacc,
    	...
    )
    VALUES
    (
    	...,
    	@puacc,
    	...
    )
    @++

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 177
    Points : 74
    Points
    74
    Par défaut resolu
    En fait c'est bon je pense avoir trouvé?!.(c'est l'énoncé de ma question qui est foireux!)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    create procedure pr_getprix (@numero_produit int, @prix smallmoney output)
    	as
    		select @prix = produit.Pxunit
    			from produit
    			where Noprod = @numero_produit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    create procedure pr_insert_ligne(@pourcent float, @nocom int, @nordre int, @qtecom int, @noprod int)
    	as
    		declare @prix smallmoney
    		exec pr_getprix 10, @prix output
    		insert into ligne (Nocom, Nordre, qtecom, Puacc, noprod ) values (@nocom, @nordre, @qtecom, @prix - ((@prix * @pourcent)/100), @noprod)
    		select * from ligne
     
    exec pr_insert_ligne 30, 2, 13, 1,10
    suis-je dans le vrai?

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    En fait c'est bon je pense avoir trouvé?!.(c'est l'énoncé de ma question qui est foireux!)
    Pas de pb

    En revanche n'oubliez pas de qualifier le nom de vos objets avec le nom du schéma auquel ils appartiennent (dbo.maTable, dbo.maProc si le schéma est dbo )

    @++

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

Discussions similaires

  1. Creation de procedure de stockage
    Par B.M.W83 dans le forum Développement
    Réponses: 1
    Dernier message: 06/06/2014, 20h06
  2. [T-SQL]Creation procedure stockee
    Par dasaiko dans le forum Sybase
    Réponses: 4
    Dernier message: 24/08/2006, 17h01
  3. Réponses: 1
    Dernier message: 31/01/2006, 17h38
  4. pb de creation de procedure...
    Par hoaxpunk dans le forum Oracle
    Réponses: 6
    Dernier message: 24/01/2006, 10h20
  5. creation d'une procedure ou fonction toute simple?
    Par atlas2003 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 16/11/2005, 14h56

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