IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Firebird Discussion :

Passage de nom de fichier comme paramaitre dans une P.Stocké


Sujet :

SQL Firebird

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    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

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    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

  3. #3
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Qi130 a écrit :
    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.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    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

  5. #5
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    qi130 à écrit :

    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.

  6. #6
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    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

  7. #7
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    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.

  8. #8
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    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

  9. #9
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    Execute procedure MA_PROC1(1,'451110', 'Table4')
    génére une erreur d'exécution !!!
    q130 a écrit :

    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).

  10. #10
    Membre à l'essai
    Inscrit en
    Juillet 2002
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 33
    Points : 20
    Points
    20
    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

  11. #11
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  12. #12
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    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

  13. #13
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    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.

  14. #14
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  15. #15
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    hé! merci barbibulle , je n'avais jamais fait attention à cette commande

  16. #16
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    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.

  17. #17
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    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?

  18. #18
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    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.

  19. #19
    Membre averti

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    379
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 379
    Points : 376
    Points
    376
    Par défaut
    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

  20. #20
    Nouveau membre du Club
    Inscrit en
    Mars 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 33
    Points : 30
    Points
    30
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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]

Discussions similaires

  1. Réponses: 4
    Dernier message: 14/02/2012, 11h23
  2. Nom de fichier image incrémenté dans une boucle for
    Par franck31 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 12/10/2011, 16h49
  3. Réponses: 9
    Dernier message: 11/01/2010, 10h30
  4. Récupérer le nom du fichier en cours dans une variable.
    Par quiky dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 06/05/2009, 13h28
  5. Réponses: 8
    Dernier message: 15/11/2007, 09h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo