Procédure stockée avec un résultat unique

Le
taboup
Bonjour

j'ai la procedure stocke suivante:

CREATE PROCEDURE PR_VI_STOCK
(@CLE_PRODUIT INT=NULL,
@STOCK INT=0 OUTPUT)
AS
declare @STOCK_ACHAT INT
declare @STOCK_CONSO INT
declare @STOCK_PRODUIT INT

SELECT @STOCK_ACHAT=CAST(SUM(ACH_QUANTITE) AS INTEGER)
FROM TB_VI_ACHATS
WHERE ACH_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_CONSO=CAST(SUM(CON_QUANTITE) AS INTEGER)
FROM TB_VI_CONSOS
WHERE CON_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_PRODUIT=CAST(BTE_STOCK AS INTEGER)
FROM TB_VI_PRODUIT
WHERE BTE_CLE=@CLE_PRODUIT

if (@STOCK_ACHAT is null )
begin
SET @STOCK_ACHAT=0
end
if (@STOCK_CONSO is null )
begin
SET @STOCK_CONSO=0
end
if (@STOCK_PRODUIT is null )
begin
SET @STOCK_PRODUIT=0
end


SET @STOCK=@STOCK_PRODUIT+@STOCK_ACHAT-@STOCK_CONSO
RETURN

Quand j'excute cette procdure dans l'analyseur de
requte je n'ai aucun rsultat, hors je devrais rcuprer
le stock ou zro. O est mon erreur?

Toutes vos remarques m'intressent

Merci de votre aide pour un pauvre dbutant SQL
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
bruno reiter [MVP]
Le #11720211
si tu veux le sortir, fais à la fin de la SP :
select @stock

br


"taboup" news:2b9001c42873$2a2822c0$
Bonjour

j'ai la procedure stockée suivante:

CREATE PROCEDURE PR_VI_STOCK
(@CLE_PRODUIT INT=NULL,
@STOCK INT=0 OUTPUT)
AS
declare @STOCK_ACHAT INT
declare @STOCK_CONSO INT
declare @STOCK_PRODUIT INT

SELECT @STOCK_ACHATÊST(SUM(ACH_QUANTITE) AS INTEGER)
FROM TB_VI_ACHATS
WHERE ACH_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_CONSOÊST(SUM(CON_QUANTITE) AS INTEGER)
FROM TB_VI_CONSOS
WHERE CON_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_PRODUITÊST(BTE_STOCK AS INTEGER)
FROM TB_VI_PRODUIT
WHERE BTE_CLE=@CLE_PRODUIT

if (@STOCK_ACHAT is null )
begin
SET @STOCK_ACHAT=0
end
if (@STOCK_CONSO is null )
begin
SET @STOCK_CONSO=0
end
if (@STOCK_PRODUIT is null )
begin
SET @STOCK_PRODUIT=0
end


SET @STOCK=@STOCK_PRODUIT+@
RETURN

Quand j'exécute cette procédure dans l'analyseur de
requête je n'ai aucun résultat, hors je devrais récupérer
le stock ou zéro. Où est mon erreur?

Toutes vos remarques m'intéressent

Merci de votre aide pour un pauvre débutant SQL
Yan
Le #11720201
salut,

ta procédure affecte le résultat dans la variable @STOCK, qui est renvoyée
modifiée (paramètre d'entrée-sortie), mais ne retourne rien en tant que tel.

si du fais :

declare @val int
PR_VI_STOCK(123, @val)
select @val

tu auras (me semble-t-il, mais je n'utilise que rarement les paramètres de
sortie) le stock pour le produit num. 123 qui s'affichera.

a+

taboup wrote:
Bonjour

j'ai la procedure stockée suivante:

CREATE PROCEDURE PR_VI_STOCK
(@CLE_PRODUIT INT=NULL,
@STOCK INT=0 OUTPUT)
AS
declare @STOCK_ACHAT INT
declare @STOCK_CONSO INT
declare @STOCK_PRODUIT INT

SELECT @STOCK_ACHATÊST(SUM(ACH_QUANTITE) AS INTEGER)
FROM TB_VI_ACHATS
WHERE ACH_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_CONSOÊST(SUM(CON_QUANTITE) AS INTEGER)
FROM TB_VI_CONSOS
WHERE CON_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_PRODUITÊST(BTE_STOCK AS INTEGER)
FROM TB_VI_PRODUIT
WHERE BTE_CLE=@CLE_PRODUIT

if (@STOCK_ACHAT is null )
begin
SET @STOCK_ACHAT=0
end
if (@STOCK_CONSO is null )
begin
SET @STOCK_CONSO=0
end
if (@STOCK_PRODUIT is null )
begin
SET @STOCK_PRODUIT=0
end


SET @STOCK=@STOCK_PRODUIT+@
RETURN

Quand j'exécute cette procédure dans l'analyseur de
requête je n'ai aucun résultat, hors je devrais récupérer
le stock ou zéro. Où est mon erreur?

Toutes vos remarques m'intéressent

Merci de votre aide pour un pauvre débutant SQL


Fred BROUARD
Le #11720161
Et si on simplifiait ???

CREATE PROCEDURE PR_VI_STOCK
@CLE_PRODUIT INT = NULL,
@STOCK INT = 0 OUTPUT
AS

SELECT @STOCK = COALESCE(CAST(SUM(ACH_QUANTITE) AS INTEGER), 0)
+ COALESCE(CAST(BTE_STOCK AS INTEGER), 0)
- COALESCE(CAST(SUM(CON_QUANTITE) AS INTEGER), 0)
FROM TB_VI_ACHATS A
LEFT OUTER JOIN TB_VI_CONSOS C
ON A.ACH_PRODUIT = C.CON_PRODUIT
LEFT OUTER JOIN TB_VI_PRODUIT
ON A.ACH_PRODUIT = BTE_CLE
WHERE A.ACH_PRODUIT=@CLE_PRODUIT

C'est suffisant et certainement beaucoup plus rapide !
Pas de variables locales, une seule requête...

Pour tester :

DECLARE @STOCKview INT
SET @STOCKview = 0

EXEC PR_VI_STOCK 1, @STOCKview OUTPUT

SELECT @STOCKview

A +

taboup a écrit:
Bonjour

j'ai la procedure stockée suivante:

CREATE PROCEDURE PR_VI_STOCK
(@CLE_PRODUIT INT=NULL,
@STOCK INT=0 OUTPUT)
AS
declare @STOCK_ACHAT INT
declare @STOCK_CONSO INT
declare @STOCK_PRODUIT INT

SELECT @STOCK_ACHATÊST(SUM(ACH_QUANTITE) AS INTEGER)
FROM TB_VI_ACHATS
WHERE ACH_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_CONSOÊST(SUM(CON_QUANTITE) AS INTEGER)
FROM TB_VI_CONSOS
WHERE CON_PRODUIT=@CLE_PRODUIT

SELECT @STOCK_PRODUITÊST(BTE_STOCK AS INTEGER)
FROM TB_VI_PRODUIT
WHERE BTE_CLE=@CLE_PRODUIT

if (@STOCK_ACHAT is null )
begin
SET @STOCK_ACHAT=0
end
if (@STOCK_CONSO is null )
begin
SET @STOCK_CONSO=0
end
if (@STOCK_PRODUIT is null )
begin
SET @STOCK_PRODUIT=0
end


SET @STOCK=@STOCK_PRODUIT+@
RETURN

Quand j'exécute cette procédure dans l'analyseur de
requête je n'ai aucun résultat, hors je devrais récupérer
le stock ou zéro. Où est mon erreur?

Toutes vos remarques m'intéressent

Merci de votre aide pour un pauvre débutant SQL





--
Frédéric BROUARD, MVP Microsoft SQL Server. Langage SQL / Delphi / web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
****************** mailto: ******************
Publicité
Poster une réponse
Anonyme