Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
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 21/04/2006, 15h28   #1
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
Par défaut Procédure et tri paramétrable ...

Bonjour à tous et à toutes.

J'ai besoin qu'une procédure me renvoie des données classées selon un ordre
paramétrable.
Exemple :

create procedure (
key1 varchar(10),
key2 varchar(10)) returns (
resA integer,
resB integer,
resC integer
) as
begin
for select champA, champB, champC from Matable
order by :key1, :key2
into :resA, :resB, :resC do
begin
suspend;
end
end

J'ai fait un premier essai, non concluant, en passant en paramètre des
chiffres (pour indiquer le numéro de la colonne) au lieu des noms de champ....

Auriez-vous une idée pour faire cela ?

Merci de vos avis.
varlau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 16h47   #2
Xo
Expert Confirmé
 
Avatar de Xo
 
Inscription : janvier 2005
Messages : 2 701
Détails du profil
Informations personnelles :
Âge : 38

Informations forums :
Inscription : janvier 2005
Messages : 2 701
Points : 3 237
Points : 3 237
Envoyer un message via Skype™ à Xo
Quel SGBD ?

Attention, SQL n'est pas un langage procédural
__________________
"Ce que l'on conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément." Nicolas Boileau

"Expliquer empêche de comprendre si cela dispense de chercher"

Quiz Oracle : venez tester vos connaissances !

La FAQ Oracle : 138 réponses à vos questions
Aidez-nous à la compléter
Xo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/04/2006, 17h06   #3
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
Par défaut Procédure ...

Le SGBD est Firebird 1.52.
varlau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 01h17   #4
Membre éprouvé
 
Avatar de JustMe
 
Inscription : juillet 2002
Messages : 432
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 432
Points : 441
Points : 441
Tout est bon dans ta procedure sauf qu'il lui manque un nom.
assure toi que les parametres de retour sont du même type que les champs du select.
__________________
<On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**
http://www.mobile-tactile.com/
JustMe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 10h29   #5
Membre confirmé
 
Avatar de touhami
 
Inscription : avril 2002
Messages : 327
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 327
Points : 209
Points : 209
Bonjour,
j'ai pas bien compris ta question

Citation:
J'ai fait un premier essai, non concluant, en passant en paramètre des
chiffres (pour indiquer le numéro de la colonne) au lieu des noms de champ....
tu veux passer quoi comme paramettres??? les Noms des champs ou bien l'index (le numero) des Champs ????.
presise toi s'il te plait.
bon courage.
touhami est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2006, 10h38   #6
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
Par défaut Procédure ...

Bonjour,

je veux passer en paramètre soit un nom de champ soit un chiffre (numéro de colonne) de façon à ce que je puisse appeler ma procédure de la manière suivante :
select * from MAPROCEDURE(2, 1) ou
select * from MAPROCEDURE('champB', 'champA') ou

pour avoir un classement d'abord sur la 2ème colonne puis sur la première ...

Mais le texte de la procédure étant compilé par FB, j'ai peur que l'on ne puisse faire une procédure 'dynamique' ...

Laurent.
varlau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/04/2006, 16h11   #7
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
execute statement et la commande qu tu cherche.
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 10h00   #8
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
La requête dynamique est possible depuis Firebird comme le dit Jean Jacques Varvenne, via la commande Execute Statement.
Exemple
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
CREATE PROCEDURE TEST(
   PORDERBY1 VARCHAr(15),
   PORDERBY2 VARCHAR(15))
RETURNS(
   CHAMPSA VARCHAr(15) ,
   CHAMPSB VARCHAR(15))
AS
DECLARE VARIABLE VARSQL VARCHAR(200);
BEGIN
VARSQL = 'SELECT CHAMPSA,CHAMPSB FROM MTABLE';
VARSQL = SQL ||'ORDER BY '||PORDERBY1||','||PORDERBY2;
FOR EXECUTE STATEMENT VARSQL INTO
    :CHAMPSA,
    :CHAMPSB
DO
    SUSPEND;
 
END
Grossomodo, ça se passe comma ça
A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 10h24   #9
Invité de passage
 
Inscription : mars 2006
Messages : 5
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 5
Points : 1
Points : 1
Par défaut Execute Statement ...

Bonjour à tous ...

et merci. Je ne connaissais pas ce genre chose, je viens de tester, ca marche nickel.
Qui au niveau des perfs ?

Merci encore.

Laurent.
varlau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2006, 14h03   #10
Membre émérite
 
Avatar de Andry
 
Inscription : juillet 2002
Messages : 1 109
Détails du profil
Informations personnelles :
Localisation : Madagascar

Informations forums :
Inscription : juillet 2002
Messages : 1 109
Points : 949
Points : 949
Envoyer un message via MSN à Andry
A mon avis une requête dynamique ne pas aussi performante q'une requête statique, mais au moins ça permet de faire plus de chose.

A+
__________________
On progresse .....
Andry est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h52.


 
 
 
 
Partenaires

Hébergement Web