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

Pb lors de l'appel d'une fonction dans une procédure stockée

3 réponses
Avatar
Geppy
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.

My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers

My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total

Help please !!!

3 réponses

Avatar
Fred BROUARD
différentes causes posible :

1) vous avez oublié le END dans le corps de la fonction

2) le type de valeur de retour DECIMAL (10,2) peut être insuffisant car il ne
permet par exemple pas la valeur : 111 234 567,89 et donc risque de provoquer un
overflow.

2) le select peut retourner un nombre considérable de valeurs, ne faudrait-il
pas faire une fonction agrégation genre somme ?


Voici une simplificatiopn possible :

CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(16,2)
AS
BEGIN
RETURN (Select SUM(A.Price * A.Quantity)
From Articles A
Inner join Orders O
on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
GROUP BY idCustomer)
END

Mais quel intérêt de passer par une fonction une chose qui sera plus performante
si elle est directement incluse dans la requête cible ?

A +



Geppy a écrit:
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.

My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers

My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total

Help please !!!






--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste 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
************************ www.datasapiens.com *************************
Avatar
jf pedrazzani
Salut,
une autre chose à ne pas faire c'est d'appeler ta procedure sp_ car cet
convention de nomage est reservée au procedure system(sp_ = system proc)
ce qui fait que quand une procedure commence par sp_ SQL va chercher dans
les procedure systeme, certe cela n'a rien à voir avec ton problème mais il
me paraissai important de le souligner
@+
Boss Hog


"Geppy" a écrit dans le message de
news: ujB%
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et
plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.

My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers

My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total

Help please !!!





Avatar
Med Bouchenafa
Développe le code de la fonction dans ta procédure et voila si cela passe son problème.
--
Bien cordialement
Med Bouchenafa



"Geppy" a écrit dans le message de news:
ujB#
Bonjour à tous !
Lorsque j'appelle ma procédure, l'analyseur de requêtes mouline, et plante
au bout d'un moment.
Ceci ne se produit pas sur la base de test qui contient beaucoup moins de
données.
Quelqu'un pourrait-il m'aider ?
Merci d'avance.
Rq : J'ai Sql Server Edition Developer avec le service pack 4 installé.

My SP
Create Sp_.. () As
Select dbo.MyFunction (idCustomer), Name, Adress....
From Customers

My function
CREATE FUNCTION MyFunction (@idCustomer int)
RETURNS decimal(10,2) AS
BEGIN
Declare @total decimal (10, 2)
Select @total = A.Price * A.Quantity
From Articles A
Inner join Orders O on A.idOrder = O.idOrder
Where O.idCustomer = @idCustomer
Return @total

Help please !!!