Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

3 réponses
Avatar
taboup
Bonjour

j'ai la procedure stock=E9e suivante:

CREATE PROCEDURE PR_VI_STOCK
(@CLE_PRODUIT INT=3DNULL,
@STOCK INT=3D0 OUTPUT)
AS
declare @STOCK_ACHAT INT
declare @STOCK_CONSO INT
declare @STOCK_PRODUIT INT

SELECT @STOCK_ACHAT=3DCAST(SUM(ACH_QUANTITE) AS INTEGER)
FROM TB_VI_ACHATS
WHERE ACH_PRODUIT=3D@CLE_PRODUIT

SELECT @STOCK_CONSO=3DCAST(SUM(CON_QUANTITE) AS INTEGER)
FROM TB_VI_CONSOS
WHERE CON_PRODUIT=3D@CLE_PRODUIT

SELECT @STOCK_PRODUIT=3DCAST(BTE_STOCK AS INTEGER)
FROM TB_VI_PRODUIT
WHERE BTE_CLE=3D@CLE_PRODUIT

if (@STOCK_ACHAT is null )
begin=20
SET @STOCK_ACHAT=3D0=20
end
if (@STOCK_CONSO is null )=20
begin=20
SET @STOCK_CONSO=3D0=20
end
if (@STOCK_PRODUIT is null )
begin=20
SET @STOCK_PRODUIT=3D0=20
end

=09
SET @STOCK=3D@STOCK_PRODUIT+@STOCK_ACHAT-@STOCK_CONSO
RETURN

Quand j'ex=E9cute cette proc=E9dure dans l'analyseur de=20
requ=EAte je n'ai aucun r=E9sultat, hors je devrais r=E9cup=E9rer=20
le stock ou z=E9ro. O=F9 est mon erreur?

Toutes vos remarques m'int=E9ressent

Merci de votre aide pour un pauvre d=E9butant SQL

3 réponses

Avatar
bruno reiter [MVP]
si tu veux le sortir, fais à la fin de la SP :
select @stock

br


"taboup" wrote in message
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
Avatar
Yan
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


Avatar
Fred BROUARD
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: ******************