Précédent   Forum des professionnels en informatique > Bases de données > Firebird
Firebird Forum d'entraide sur le SGBD Firebird. Avant de poster -> F.A.Q Firebird, Tutoriels
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2010, 20h52   #1
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Par défaut Jointure avec les procédure stockée

Bonsoir tout le monde;
Je début avec les procédures stockées.

Est ce possible de créer une PS qui donne le même résultat que la requête suivante
Code :
1
2
3
4
5
6
7
 
   SELECT sp.produit,sp.qte
   FROM sites_produits sp, sites s 
   WHERE sp.capacite > 0
   AND sp.client = s.client 
   AND sp.site = s.site
   AND s.depot = 1
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 21h21   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Bonsoir kaouane,

oui tu peux mettre tout type de select dans une procédure stockée.

Un select qui renvois qu'une seule ligne (et toujours qu'une seule) sera du type :

Code :
SELECT count(*) FROM matable INTO :NombreDeLigne;
Un select qui renvois de 0 à n ligne sera du type

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FOR
  SELECT sp.produit, sp.qte
   FROM sites_produits sp, sites s 
   WHERE sp.capacite > 0
   AND sp.client = s.client 
   AND sp.site = s.site
   AND s.depot = 1
INTO :PRODUIT,
     :QTE
DO
begin
  /* Traitement éventuel pour chaque ligne */
  /*  ....   */
 
  suspend; /* Renvoi les données */
end
nb : préférez utiliser la norme SQL pour les jointures

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
SET TERM ^ ;
CREATE OR ALTER PROCEDURE MA_PS
Returns (
 PRODUIT varchar(20), /* déclarer le même type que dans la table sites_produits */
  QTE integer /* idem */
)
AS
BEGIN
 
  FOR
    SELECT sp.produit, sp.qte
      FROM sites_produits sp
      INNER JOIN sites s ON (sp.client = s.client AND sp.site = s.site)
      WHERE sp.capacite > 0
      AND s.depot = 1
    INTO :PRODUIT,
         :QTE
  DO
    suspend;
END^
SET TERM ; ^
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 21h30   #3
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Merci beaucoup beaucoup beaucoup Barbibulle;
Rapide, précis et riche.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 09h11   #4
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Est ce possible de créer une PS qui ne renvoi qu'un ensemble de données?.
comme :
Code :
SELECT * FROM commandes WHERE dateF = :d
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 10h48   #5
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Salut

Si cette PS n'effectue qu'un SELECT autant exécuter directement une requête.
Sinon, oui c'est possible:
Code :
1
2
3
4
5
6
7
8
 
  FOR
    SELECT F1, F2 
    FROM T1
    WHERE F3 = :IN_F3
    INTO :OUT_F1, :OUT_F2
  DO
    SUSPEND;
[edit]
C'est l'exemple de Barbibulle d'ailleurs.

@+
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 10h50   #6
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
merci Cl@udius;
Je voulais profiter de l'avantage des PS; puisque elles sont plus rapides à retourner le résulta.
Est ce que ce n'est pas intéressant??
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 10h52   #7
Modérateur
 
Avatar de Cl@udius
 
Homme Claude Renouleaud
Développeur informatique
Inscription : février 2006
Messages : 4 754
Détails du profil
Informations personnelles :
Nom : Homme Claude Renouleaud
Âge : 49
Localisation : France, Hautes Pyrénées (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2006
Messages : 4 754
Points : 6 767
Points : 6 767
Citation:
Envoyé par kaouane Voir le message
puisque elles sont plus rapides à retourner le résultat.
Une requête reste le moyen le plus simple et le plus rapide pour accéder aux données.
__________________
A la question technique que par MP/MV tu formuleras, la réponse aux oubliettes finira.
Cl@udius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 10h59   #8
Membre habitué
 
Inscription : mai 2006
Messages : 200
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : mai 2006
Messages : 200
Points : 105
Points : 105
Je débute avec les PS, mais c'est la faute de makowski et ces amis sur ce lien :
http://www.ibphoenix.com/main.nfs?a=...=ibp_using_sps
ils m'ont ouvert l’appétit.
kaouane est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h35.


 
 
 
 
Partenaires

Hébergement Web