OVH Cloud OVH Cloud

Récupérer une valeur de SP dans une vue

8 réponses
Avatar
jack
Bonjour,

je n'arrive pas à écrire une requête.

Le problème est, schématiquement, le suivant :

Table 1
idArticle, LibelleArticle

Table 2
idArticle, dateAchat, prixAchat

J'ai une SP qui fait :
CREATE PROCEDURE dbo.prixMoyen @idArticle int,
@prixMoyen decimal(18,2) output

as
select @prixMoyen = ... from Table2 ...
(en fait la SP appelle elle même une fonction)

return

est-il possible de récupérer dans une vue

idArticle, libelleArticle, PrixMoyen

Pour résumer est-il possible de récupérer dans une vue le output d'une SP ?
J'espère avoir été clair... ou à peu près

Merci

8 réponses

Avatar
Fred BROUARD
Oui yu as été clair. la réponse est Non absolument pas.

Tu n'as sans doute pas compris a quoi servait une SP. Une SP sert à piloter une
ou plusieurs requêtes éventuellement paramétrées afin de gérer des transactions.
En dehors de cela elle est inéficace.

Seule une fonction peut être utilisée dans une requête SQL. Mais elle ne peut en
aucun cas gérer elle même une transaction.

Si tu nous expliquait en détail ton problème ???

A +

jack a écrit:
Bonjour,

je n'arrive pas à écrire une requête.

Le problème est, schématiquement, le suivant :

Table 1
idArticle, LibelleArticle

Table 2
idArticle, dateAchat, prixAchat

J'ai une SP qui fait :
CREATE PROCEDURE dbo.prixMoyen @idArticle int,
@prixMoyen decimal(18,2) output

as
select @prixMoyen = ... from Table2 ...
(en fait la SP appelle elle même une fonction)

return

est-il possible de récupérer dans une vue

idArticle, libelleArticle, PrixMoyen

Pour résumer est-il possible de récupérer dans une vue le output d'une SP ?
J'espère avoir été clair... ou à peu près

Merci





--
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
jack
Mon problème est le suivant.

J'ai, en fait, une fonction qui retourne une table du style
idArticle, prixMoyen1, prixMoyen2

CREATE FUNCTION prixMoyen (@idArticle int,@Date smalldatetime = null)
RETURNS @prixMoyen TABLE (idArticle_id nchar(5) primary key,
prixMoyen1(18,5) ,
prixMoyen2(18,5)

AS
begin
-- des trucs compliqués avec des curseurs
insert @prixMoyen mes valeurs

return

end


Et j'ai une vue qui retourne
idArticle, libelleArticle,etc,etc

Comment intégrer dans cette vue (si c'est possible) les valeurs retournées
par ma fonction pour arriver à
idArticle, libelleArticle, prixMoyen1, prixMoyen2

Une "espèce de jointure" entre ma vue et la fonction

Merci


"Fred BROUARD" wrote in message
news:%23%
Oui yu as été clair. la réponse est Non absolument pas.

Tu n'as sans doute pas compris a quoi servait une SP. Une SP sert à


piloter une
ou plusieurs requêtes éventuellement paramétrées afin de gérer des


transactions.
En dehors de cela elle est inéficace.

Seule une fonction peut être utilisée dans une requête SQL. Mais elle ne


peut en
aucun cas gérer elle même une transaction.

Si tu nous expliquait en détail ton problème ???

A +

jack a écrit:
> Bonjour,
>
> je n'arrive pas à écrire une requête.
>
> Le problème est, schématiquement, le suivant :
>
> Table 1
> idArticle, LibelleArticle
>
> Table 2
> idArticle, dateAchat, prixAchat
>
> J'ai une SP qui fait :
> CREATE PROCEDURE dbo.prixMoyen @idArticle int,
> @prixMoyen decimal(18,2) output
>
> as
> select @prixMoyen = ... from Table2 ...
> (en fait la SP appelle elle même une fonction)
>
> return
>
> est-il possible de récupérer dans une vue
>
> idArticle, libelleArticle, PrixMoyen
>
> Pour résumer est-il possible de récupérer dans une vue le output d'une


SP ?
> J'espère avoir été clair... ou à peu près
>
> Merci
>
>

--
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
Fred BROUARD
Encore une fois poste LA TOTALITÉ du code de ta SP et ta vue !

A +

jack a écrit:
Mon problème est le suivant.

J'ai, en fait, une fonction qui retourne une table du style
idArticle, prixMoyen1, prixMoyen2

CREATE FUNCTION prixMoyen (@idArticle int,@Date smalldatetime = null)
RETURNS @prixMoyen TABLE (idArticle_id nchar(5) primary key,
prixMoyen1(18,5) ,
prixMoyen2(18,5)

AS
begin
-- des trucs compliqués avec des curseurs
insert @prixMoyen mes valeurs

return

end


Et j'ai une vue qui retourne
idArticle, libelleArticle,etc,etc

Comment intégrer dans cette vue (si c'est possible) les valeurs retournées
par ma fonction pour arriver à
idArticle, libelleArticle, prixMoyen1, prixMoyen2

Une "espèce de jointure" entre ma vue et la fonction

Merci


--
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
jack
Sincèrement je ne pense pas que cela soit nécessaire de TOUT poster avec des
tas de tables qui n'ont pas de sens pour toi ni des calculs sur la fonction
qui font appel à des curseurs que je devrais ensuite expliquer etc etc.

Je pense que l'exemple que j'ai envoyé est assez clair et significatif de ce
que je souhaiterais faire.

Si il t'en faut plus pour comprendre ce que je veux faire ou pour bien
vouloir répondre, je vais me débrouiller autrement.

"Fred BROUARD" wrote in message
news:


Encore une fois poste LA TOTALITÉ du code de ta SP et ta vue !

A +

jack a écrit:
> Mon problème est le suivant.
>
> J'ai, en fait, une fonction qui retourne une table du style
> idArticle, prixMoyen1, prixMoyen2
>
> CREATE FUNCTION prixMoyen (@idArticle int,@Date smalldatetime = null)
> RETURNS @prixMoyen TABLE (idArticle_id nchar(5) primary key,
> prixMoyen1(18,5) ,
> prixMoyen2(18,5)
>
> AS
> begin
> -- des trucs compliqués avec des curseurs
> insert @prixMoyen mes valeurs
>
> return
>
> end
>
>
> Et j'ai une vue qui retourne
> idArticle, libelleArticle,etc,etc
>
> Comment intégrer dans cette vue (si c'est possible) les valeurs


retournées
> par ma fonction pour arriver à
> idArticle, libelleArticle, prixMoyen1, prixMoyen2
>
> Une "espèce de jointure" entre ma vue et la fonction
>
> Merci
--
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
Med Bouchenafa
Je ne sais pas ce que tu veux faire mais je vois deux solutions
a) Tu peux recuperer dans une table la sortie de ta procedure stockee.
INSERT INTO NomTable...EXEC NomProcedure
Voir Aide En Ligne pour plus de details

b) Dans ta application cliente, tu recuperes la sortie de la SP dans un
curseur client

Par contre, je ne connais pas de moyen de creer une vue a partir d'une SP

Bien cordialement
Med Bouchenafa



"jack" wrote in message
news:
Bonjour,

je n'arrive pas à écrire une requête.

Le problème est, schématiquement, le suivant :

Table 1
idArticle, LibelleArticle

Table 2
idArticle, dateAchat, prixAchat

J'ai une SP qui fait :
CREATE PROCEDURE dbo.prixMoyen @idArticle int,
@prixMoyen decimal(18,2) output

as
select @prixMoyen = ... from Table2 ...
(en fait la SP appelle elle même une fonction)

return

est-il possible de récupérer dans une vue

idArticle, libelleArticle, PrixMoyen

Pour résumer est-il possible de récupérer dans une vue le output d'une SP
?
J'espère avoir été clair... ou à peu près

Merci




Avatar
jack
Mais est-il possible de récupérer dans une vue le résultat d'une fonction
qui retourne une table ?
En fait, donc, un des champs de la table créée par la fonction.

J'arrive à récupérer le résultat d'une fonction lorsque c'est un numéric
mais je ne trouve pas la syntaxe pour une fonction retournant une table.

Si c'est possible bien entendu...

Merci

"Med Bouchenafa" wrote in message
news:%
Je ne sais pas ce que tu veux faire mais je vois deux solutions
a) Tu peux recuperer dans une table la sortie de ta procedure stockee.
INSERT INTO NomTable...EXEC NomProcedure
Voir Aide En Ligne pour plus de details

b) Dans ta application cliente, tu recuperes la sortie de la SP dans un
curseur client

Par contre, je ne connais pas de moyen de creer une vue a partir d'une SP

Bien cordialement
Med Bouchenafa



"jack" wrote in message
news:
> Bonjour,
>
> je n'arrive pas à écrire une requête.
>
> Le problème est, schématiquement, le suivant :
>
> Table 1
> idArticle, LibelleArticle
>
> Table 2
> idArticle, dateAchat, prixAchat
>
> J'ai une SP qui fait :
> CREATE PROCEDURE dbo.prixMoyen @idArticle int,
> @prixMoyen decimal(18,2) output
>
> as
> select @prixMoyen = ... from Table2 ...
> (en fait la SP appelle elle même une fonction)
>
> return
>
> est-il possible de récupérer dans une vue
>
> idArticle, libelleArticle, PrixMoyen
>
> Pour résumer est-il possible de récupérer dans une vue le output d'une


SP
> ?
> J'espère avoir été clair... ou à peu près
>
> Merci
>
>




Avatar
Med Bouchenafa
Je n'arrive pas vraiment saisir ce que tu veux faire
C'est quoi l'exemple avec une fonction lorsque c'est un numérique

--

Bien cordialement
Med Bouchenafa

"jack" wrote in message
news:%
Mais est-il possible de récupérer dans une vue le résultat d'une fonction
qui retourne une table ?
En fait, donc, un des champs de la table créée par la fonction.

J'arrive à récupérer le résultat d'une fonction lorsque c'est un numéric
mais je ne trouve pas la syntaxe pour une fonction retournant une table.

Si c'est possible bien entendu...

Merci

"Med Bouchenafa" wrote in message
news:%
Je ne sais pas ce que tu veux faire mais je vois deux solutions
a) Tu peux recuperer dans une table la sortie de ta procedure stockee.
INSERT INTO NomTable...EXEC NomProcedure
Voir Aide En Ligne pour plus de details

b) Dans ta application cliente, tu recuperes la sortie de la SP dans un
curseur client

Par contre, je ne connais pas de moyen de creer une vue a partir d'une SP

Bien cordialement
Med Bouchenafa



"jack" wrote in message
news:
> Bonjour,
>
> je n'arrive pas à écrire une requête.
>
> Le problème est, schématiquement, le suivant :
>
> Table 1
> idArticle, LibelleArticle
>
> Table 2
> idArticle, dateAchat, prixAchat
>
> J'ai une SP qui fait :
> CREATE PROCEDURE dbo.prixMoyen @idArticle int,
> @prixMoyen decimal(18,2) output
>
> as
> select @prixMoyen = ... from Table2 ...
> (en fait la SP appelle elle même une fonction)
>
> return
>
> est-il possible de récupérer dans une vue
>
> idArticle, libelleArticle, PrixMoyen
>
> Pour résumer est-il possible de récupérer dans une vue le output d'une


SP
> ?
> J'espère avoir été clair... ou à peu près
>
> Merci
>
>








Avatar
jack
Je vais essayer d'être clair
(évidemment en réalité c'est plus compliqué que ça)

Table 1
idArticle, LibelleArticle

Table 2
idArticle, dateAchat, prixAchat

cas n° 1 : une fonction retourne un numéric
CREATE FUNCTION f_prixMoyen(@idArticle int )
RETURNS numeric(18,5)
BEGIN
declare...
select ... calculs à partir de la table 2 sans tenir compte des dates
return @res
END

Si je fais une vue
create view v_prix as
select
idArticle
, libelleArticle
,pirxMoyenÛo.f_prixMoyen(idArticle)

cela fonctionne.


cas n°2 : la fonction retourne une table
CREATE FUNCTION t_prixMoyen (@idArticle int,@Date smalldatetime = null)
RETURNS @prixMoyen TABLE (idArticle_id nchar(5) primary key,
prixMoyen1(18,5) ,
prixMoyen2(18,5)

AS
begin
-- des trucs compliqués avec des curseurs
-- partir de la table 2 en tenant compte des dates et d'autres
paramètres

insert @prixMoyen mes valeurs

return
end

Si j'essaie de faire une vue
create view v_prix as
select
idArticle
, libelleArticle
,pirxMoyen=(select prixMoyen1 from dbo.t_prixMoyen (idArticle,NULL))

j'obtiens ce message :
idArticle is not recognized OPTIMIZER LOCKINTS OPTION

Et si je passe une valeur "en dur" à la place de idArticle pour tester, le
résultat n'est pas conforme à ce que j'attends car il n'a pas l'air non plus
d'interpréter correctement la deuxième valeur en l'occurence le NULL.
Si je passe 2 valeurs "en dur" correctes le résultat est bon.

Donc j'ai le "sentiment" que ce doit être possible mais que j'ai un problème
de syntaxte.

Merci


"Med Bouchenafa" wrote in message
news:
Je n'arrive pas vraiment saisir ce que tu veux faire
C'est quoi l'exemple avec une fonction lorsque c'est un numérique

--

Bien cordialement
Med Bouchenafa

"jack" wrote in message
news:%
> Mais est-il possible de récupérer dans une vue le résultat d'une


fonction
> qui retourne une table ?
> En fait, donc, un des champs de la table créée par la fonction.
>
> J'arrive à récupérer le résultat d'une fonction lorsque c'est un numéric
> mais je ne trouve pas la syntaxe pour une fonction retournant une table.
>
> Si c'est possible bien entendu...
>
> Merci
>
> "Med Bouchenafa" wrote in message
> news:%
>> Je ne sais pas ce que tu veux faire mais je vois deux solutions
>> a) Tu peux recuperer dans une table la sortie de ta procedure stockee.
>> INSERT INTO NomTable...EXEC NomProcedure
>> Voir Aide En Ligne pour plus de details
>>
>> b) Dans ta application cliente, tu recuperes la sortie de la SP dans un
>> curseur client
>>
>> Par contre, je ne connais pas de moyen de creer une vue a partir d'une


SP
>>
>> Bien cordialement
>> Med Bouchenafa
>>
>>
>>
>> "jack" wrote in message
>> news:
>> > Bonjour,
>> >
>> > je n'arrive pas à écrire une requête.
>> >
>> > Le problème est, schématiquement, le suivant :
>> >
>> > Table 1
>> > idArticle, LibelleArticle
>> >
>> > Table 2
>> > idArticle, dateAchat, prixAchat
>> >
>> > J'ai une SP qui fait :
>> > CREATE PROCEDURE dbo.prixMoyen @idArticle int,
>> > @prixMoyen decimal(18,2) output
>> >
>> > as
>> > select @prixMoyen = ... from Table2 ...
>> > (en fait la SP appelle elle même une fonction)
>> >
>> > return
>> >
>> > est-il possible de récupérer dans une vue
>> >
>> > idArticle, libelleArticle, PrixMoyen
>> >
>> > Pour résumer est-il possible de récupérer dans une vue le output


d'une
> SP
>> > ?
>> > J'espère avoir été clair... ou à peu près
>> >
>> > Merci
>> >
>> >
>>
>>
>
>