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 06/02/2005, 11h50   #1
Invité de passage
 
Inscription : mai 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 19
Points : 3
Points : 3
Envoyer un message via AIM à Abidou
Par défaut Passage de nom de fichier comme paramaitre dans une P.Stocké

Bonjour à tous,

Est-il possible de passer le nom d'une table comme paramaitre dans une procedure stockée ?

C.à.d :

J'ai une vaingtaine de fichies, je teste sur le premier fichier file1 s'il est en utilisation (contient des enreg.), je passe au suivant file2, jusqu'à ce que je trouve le fichier qui est vacant est je passe son nom à ma prosédure stockée...
Est-ce possible.

ça m'évitera d'utiliser 20 procédures stockées !!!!

J'attent une répense avec impatience.

Merci d'avance
Abidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2005, 18h43   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Un peu confus....

Tu veux passer une table ou un fichier ?????
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2005, 19h04   #3
Invité de passage
 
Inscription : mai 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 19
Points : 3
Points : 3
Envoyer un message via AIM à Abidou
Qi130 a écrit :
Citation:
Un peu confus....

Tu veux passer une table ou un fichier ?????
_________________
Il n'y a pas de bonnes réponses à une mauvaise question.
-----------------------
J'ai une base de donnée MyBase qui contient des fichiers (ou des tables).

Après connection d'une base de données, on utilise ses fichiers ou ses tables.
Je croix fichier et table sont dans ce cas identiques.

Merci.
Abidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 09h28   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par Abidou

J'ai une base de donnée MyBase qui contient des fichiers (ou des tables).
Ah, MyBase.... mais on est dans le Forum Interbase/Firebird là......
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 14h07   #5
Invité de passage
 
Inscription : mai 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 19
Points : 3
Points : 3
Envoyer un message via AIM à Abidou
qi130 à écrit :

Citation:
Ah, MyBase.... mais on est dans le Forum Interbase/Firebird là......
S'il te plait, MyBase est le nom de la base de donnée Interbase.

On cherche à résoudre un problème, mais pas d'en chercher d'avantage.

Essaye de faire un fort de votre part et comprendre les choses sans donner des critiques gratuites.
Abidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 14h58   #6
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par Abidou
S'il te plait, MyBase est le nom de la base de donnée Interbase.
no comment...

Citation:
Envoyé par Abidou
On cherche à résoudre un problème, mais pas d'en chercher d'avantage.
...appeler une base Interbase du nom d'un SGBD est déjà générateur de pb (regarde: 4 posts avant de commencer à réfléchir à ton pb !)

Citation:
Envoyé par Abidou

Essaye de faire un fort de votre part et comprendre les choses sans donner des critiques gratuites.
Faire des efforts il me semble que je suis le seul à en faire pour tenter de comprendre le contexte de ton post

Citation:
Envoyé par Règles des forums
Quand vous posez une question, soyez aussi précis que possible : quel système et/ou quel outil vous avez, quelle version, quelle édition, etc. Que souhaitez vous faire au juste ? Si votre question n'est pas suffisamment précise, personne ne pourra vous aider.
Alors, elle est où la version d'Interbase que tu utilises ?

Des efforts encore: en annonce sur le forum Interbase (en 1ère ligne) oh mais que vois-je ? un tutoriel sur les procédures stockées

-------------------------------------------------

Donc, oui tu peux passer ce qui te chante comme paramètre à un procédure:
- une date
- un nom de table
- le nom de ta base
- le fichier contenant ta base (suffixe GDB)
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2005, 21h58   #7
Invité de passage
 
Inscription : mai 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 19
Points : 3
Points : 3
Envoyer un message via AIM à Abidou
Merci qi130 pour tes efforts.

J'utilise la version vree d'interbase.

Merci encore.

Je pose la question d'une autre façon :

Est-ce qu'il y a possibilité de passer le nom d'une table (fichier) comme paramaitre dans une procédure stockée ?

Oui ou Nom ?

La question est claire et nette.
Abidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2005, 09h58   #8
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par Abidou

Est-ce qu'il y a possibilité de passer le nom d'une table (fichier) comme paramaitre dans une procédure stockée ?

Oui ou Nom ?

La question est claire et nette.
et la réponse t'a déjà été fournie :

Citation:
Envoyé par qi130 dans son post précédent
Donc, oui tu peux passer ce qui te chante comme paramètre à un procédure:
- une date
- un nom de table
- le nom de ta base
- le fichier contenant ta base (suffixe GDB)
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2005, 23h39   #9
Invité de passage
 
Inscription : mai 2002
Messages : 19
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 19
Points : 3
Points : 3
Envoyer un message via AIM à Abidou
Votre répense n'est pas claire.
Et je croix que j'arrive pas à poser ma question d'une façons plus claire.


J'ai une base de donnée interbase nomée MyDatabase.

Les tables de ctte base de donnée sont :

Table1
Table2
Table3
.
.
.
Tablen

ma procédure stockée s'écrit comme suit :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SET TERM ^ ;
CREATE PROCEDURE MA_PROC1(u smallint, xNumPiece char(12), xFile char(12))
AS
    DECLARE VARIABLE xnume         integer;
    DECLARE VARIABLE xcode         CHAR(10);
    DECLARE VARIABLE xcdmvt        CHAR(12);
    DECLARE VARIABLE xdtmvt        CHAR(20);
BEGIN
        FOR SELECT nume, code, cdmvt FROM  :xFile
        INTO :xnume, :xcode, :xcdmvt
        do
        begin
		//Mon traitement sur la TABLE xFile
        end
 
END
^
SET TERM ;^

Lorsque j'exécute cette procedure en passant par exple :

Code :
Execute procedure MA_PROC1(1,'451110', 'Table4')
génére une erreur d'exécution !!!
q130 a écrit :

Citation:
Donc, oui tu peux passer ce qui te chante comme paramètre à un procédure:
- une date
- un nom de table
- le nom de ta base
- le fichier contenant ta base (suffixe GDB )
J'espère que que monsieur q130 comprendra ma question cette fois-ci.
Et si tu as un exemple de passage de nom d'une table dans un PS ?

Et ce que ça dépend de la version d'interbase (moi j'utilise la version free d'interbase).
Abidou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2005, 08h43   #10
Invité régulier
 
Inscription : juillet 2002
Messages : 33
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 33
Points : 6
Points : 6
Par défaut mm sujet

c'est pas possible de passer le nom d'une table comme
paramt dans une PS en IB , les noms de tables doivent etre figés

salut est bon courage
ada_b est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2005, 10h07   #11
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
Oui sous Interbase ce n'est pas possible sous FB1.5 il y a un moyen de le faire.

Sous IB il faut adapter le PS avec des IF


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
SET TERM ^ ; 
CREATE PROCEDURE MA_PROC1(u smallint, xNumPiece char(12), xFile char(12)) 
AS 
    DECLARE VARIABLE xnume         integer; 
    DECLARE VARIABLE xcode         CHAR(10); 
    DECLARE VARIABLE xcdmvt        CHAR(12); 
    DECLARE VARIABLE xdtmvt        CHAR(20); 
BEGIN 
  IF (xFile='Table1') then
  begin
        FOR SELECT nume, code, cdmvt FROM  Table1 
        INTO :xnume, :xcode, :xcdmvt 
        do 
        begin 
      //Mon traitement sur la TABLE table1 
        end 
  end
  IF (xFile='Table2') then
  begin
        FOR SELECT nume, code, cdmvt FROM  Table2 
        INTO :xnume, :xcode, :xcdmvt 
        do 
        begin 
      //Mon traitement sur la TABLE table2 
        end 
  end
  IF (xFile='Table3') then
  begin
        FOR SELECT nume, code, cdmvt FROM  Table3 
        INTO :xnume, :xcode, :xcdmvt 
        do 
        begin 
      //Mon traitement sur la TABLE table3 
        end 
  end
END 
^ 
SET TERM ;^
Normalement vous n'avez pas à faire ce genre de chose car lorsqu'on conçoit bien sa base on n'a pas deux tables qui se ressembles...

Pourquoi avez vous autant de tables identiques ?
Pourquoi n'avez vous pas regroupé dans une seule et même table ce qui est commun à toute ces tables ? Vous n'auriez plus ce problème.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2005, 11h06   #12
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
Citation:
Envoyé par Abidou
J'espère que que monsieur q130 comprendra ma question cette fois-ci.
Ah, enfin du concret pour réfléchir.....

C'est une chose de passer un paramètre à une PS, mais c'en est 1 autre que de l'exploiter

Mais si le monde était parfait....
__________________
"Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
-----------------------
Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
Usus magister est optimus
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2005, 17h23   #13
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
hé ben, cela chauffe... sous interbase ou firebird, il n'y à pas de commande "execute immediate" ou quelque chose d'approchant qui puisse construire une requête à la volée et l'exécuter (en oracle cela existe).

la seule chose qui pourrait rendre cela possible dans l'état actuel serait une udf qui permet la connexion à une autre base de données et donc à la base elle même par l'occasion.
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/02/2005, 19h20   #14
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
Citation:
Envoyé par jean-jacques varvenne
hé ben, cela chauffe... sous interbase ou firebird, il n'y à pas de commande "execute immediate" ou quelque chose d'approchant qui puisse construire une requête à la volée et l'exécuter (en oracle cela existe).

la seule chose qui pourrait rendre cela possible dans l'état actuel serait une udf qui permet la connexion à une autre base de données et donc à la base elle même par l'occasion.
C'est faux, comme je l'ai dit sous Interbase il faut passer pas des if imbriqués mais sous Firebird, il y a un moyen.

Et ce moyen c'est justement Execute statement.


Code :
1
2
3
4
5
6
7
8
9
CREATE PROCEDURE SelectSurTableDynamique(NomDeTable VARCHAR(100))
  RETURNING_VALUES (LesColonnesCommunesAuxTables ...)
AS
BEGIN
FOR EXECUTE STATEMENT 'SELECT LesColonnesCommunesAuxTables FROM ' || NomDeTable 
  INTO :LesColonnesCommunesAuxTables
DO
  SUSPEND;
END
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2005, 10h49   #15
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
hé! merci barbibulle , je n'avais jamais fait attention à cette commande
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2005, 10h57   #16
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
Ca peut dépanner mais c'est quand même moins performant qu'un select compilé sans compter que du coup de code est moins robuste.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2005, 11h06   #17
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
oui, cela est sûr, mais sa règle les problèmes de notre ami et cela m'apporte aussi une solution pour réglé épisodiquemt des problèmes.

tiens, en parlant de cela, est-il possible d'établir dans une procédure stockée une connexion à une autre base, afin de transférer directement les données de l'une vers l'autre?
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2005, 12h29   #18
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
Citation:
Envoyé par jean-jacques varvenne
oui, cela est sûr, mais sa règle les problèmes de notre ami
non car il est sous IB6 je crois.

Citation:
Envoyé par jean-jacques varvenne
tiens, en parlant de cela, est-il possible d'établir dans une procédure stockée une connexion à une autre base, afin de transférer directement les données de l'une vers l'autre?
Non, a moins de passer par la programmation d'udf.

Et dans certains cas les utilitaires de réplication permettent des transferts conditionnels.
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2005, 14h16   #19
Membre éclairé
 
Inscription : décembre 2004
Messages : 379
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 379
Points : 304
Points : 304
ok c'est bien se que je pensé il y a 1 an, en programmant justement une udf qui permet le transfert de données entres des bases différentes.

ouf, cela me rassure...

en tout cas, je tiens à te féliciter Barbibulle pour la justesse de tes réponses
jean-jacques varvenne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/03/2005, 16h40   #20
Membre à l'essai
 
Inscription : mars 2004
Messages : 33
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 33
Points : 23
Points : 23
Par défaut Passage du paramètre nom de la table ds une Procédure Stocké

Bonjour à tous et merci,
je profite cette occasion pour poser mon pb qui se rapproche de c qui a été posé.
Alors, j'ai une base de donnée crée sous Firebird 1.5.
Je veux passer le nom d'une table comme paramètre dans une procédure stocké.
Tous d'accord, qu'avec Intrebase c impossible, mais avec firebird c possible.
Bon, j'ai l'essayé avec firebird mais même pb !!!!
et voici mon code de la procédure stocké :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
ALTER PROCEDURE PS_UPDATE_SEQ 
AS
DECLARE VARIABLE ENTITE VARCHAR(30);
DECLARE VARIABLE I INTEGER;
begin
    FOR
    SELECT entite FROM sequenceur INTO :entite
    do
        begin
          execute statement 'select max(id) from ' || :entite INTO :i; 
          suspend; 
         UPDATE sequenceur seq SET seq.compteur = :i  WHERE seq.entite = :entite;
        suspend;
        end
 end
Pour comprendre ce code :
on a table sequenceur contenant la liste des nom des tables dans la colonne entite et leurs compteurs d'id.
sequenceur (entite varcher(30), compteur integer)
Pour chaque nom du table faire : calculer le max des id et l'affecter au variable i.
puis mettre à jour le compteur de la table sequenceur pour chaque entite (nom table) parcouru.

Je crois que c clair. (espérent bien bien sûr)

lors de l'execution tous va bien mais qds je vérifi la colonne compteur de la table sequenceur rien n'a été changé !!! (bien sûr j'ai fait tout les commit)

[/code]
moucrack 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 19h29.


 
 
 
 
Partenaires

Hébergement Web