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 :

Renvoyer un tableau depuis une procédure stockée


Sujet :

SQL Firebird

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Renvoyer un tableau depuis une procédure stockée
    Voici mon problème:
    J'ai réalisé une application client/serveur en delphi (avec donc plusieurs clients et un serveur de BD). Dans mon source delphi, j'appelle une procédure stockée qui devrait me retourner un tableau avec 3 colonnes.

    Au départ, j'avais essayé d'utiliser une table temporaire.
    Le problème c'est que lorsque mon client 1 n'utilise plus la procédure stockée, le temps qu'il aille lire le contenu de la table temporaire, un autre client 2 a pu exécuter la procédure stockée et modifier le contenu de la table temporaire...

    J'en suis donc venu à essayer d'écrire mes valeurs plutôt dans un tableau que dans une table, puis de renvoyer le tableau au programme delphi.

    Le problème, c'est que je n'arrive pas à trouver la syntaxe exacte pour le faire...

    Quelqu'un a une idée?

  2. #2
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Je vois pas trop ou elle est le problème.
    En faites, chaque fois que tu fais appel à ton procedure, elle te renvoi les données que tu veux que tu peux recupérer via un IbQuery ou une IbStoredProc.
    A toi de traiter après ces données.

    Sinon, donne plus d'infos

    A+

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Oui, mais j'ai pas envie d'appeler 1000 fois ma procédure pour qu'elle me renvoie à chaque fois 3 valeurs. J'ai pas envie de surcharger mon réseau.

    Je veux que ça soit la procédure stockée qui fasse les 1000 traitements et qui me renvoit en une seule fois un tableau avec les 1000 enregistrements...

    Je suis clair là?

  4. #4
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Je commence à comprendre.
    Si tu peux poster du code et nous explique ce que tu veux faire via la procedure stocké, ça nous sera d'une grande aide.

    A+

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Voila comment je fait aujourd'hui:

    set term ^ ;

    create procedure proc_tab
    (
    jour varchar(8)
    )
    as
    declare variable NB_ATTENTE integer;
    declare variable NB_TRAITE integer;
    declare variable i integer;


    begin
    i=0;

    /* je vide le contenu de la table temporaire */
    delete from TAB;


    while (i < 1000) do
    begin
    select count(*) from ol_article o where o.date_rdv = :jour and
    o.cpt = :i into :nb_attente;

    select count(*) from ol_article o where o.ol_status='51' and
    o.date_rdv=:jour and o.cpt= :i into :nb_traite;

    /* je remplis le contenue de la table temporaire */
    insert into TAB (CPT, NB_ATTENTE, NB_TRAITE) VALUES
    (:i, :nb_attente, :nb_traite);

    i=i+1;

    end
    end ^

    set term ; ^


    Et je voudrai remplacer mon insert par l'ajout de mes données dans un tableau et de renvoyer le contenu de mon tableau quand ma procédure se termine (faire un returns (tab) ou qqch comme ça).

    Voila

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Mai 2003
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    C'est:
    jour varchar(8) à la place du smiley!

  7. #7
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Déjà j'opterais pour une procedure de ce genre :
    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
     
    CREATE PROCEDURE PROC_TAB (
        JOUR VARCHAR(8))
    RETURNS (
        NB_ATTENTE INTEGER,
        NB_TRAITE INTEGER,
        CPT INTEGER)
    AS
    DECLARE VARIABLE I INTEGER; 
    BEGIN 
       I=0; 
       WHILE (I < 1000) DO 
       BEGIN 
          SELECT 
               COUNT(*) FROM OL_ARTICLE O 
          WHERE 
              (O.DATE_RDV = :JOUR) AND 
              (O.CPT = :I)
          INTO :NB_ATTENTE; 
     
          SELECT 
               COUNT(*) FROM OL_ARTICLE O 
          WHERE 
              (O.OL_STATUS = '51') AND 
              (O.DATE_RDV = :JOUR) AND 
              (O.CPT = :I)
          INTO :NB_TRAITE; 
          CPT = I;
      I=I+1; 
    END
    Je pencherais pour ce code, a toi de voir.
    Il suffit d'utiliser un IBquery au niveau de Delphi pour recuperer tes 1000 lignes via la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SELECT NB_ATTENTE, NB_TRAITE, CPT FROM PROC_TAB:JOUR
    Tu initialise le paramètre JOUR et le tour est joué

    A+

Discussions similaires

  1. Réponses: 27
    Dernier message: 08/03/2007, 16h09
  2. Passer en paramétre un tableau dans une procédure stockée
    Par killysui dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/04/2006, 11h47
  3. Création de fichier depuis une procédure stockée
    Par xavier ringoise dans le forum SQL
    Réponses: 2
    Dernier message: 07/03/2006, 09h45
  4. Réponses: 2
    Dernier message: 21/12/2005, 17h33
  5. Envoyer un mail depuis une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 03/10/2005, 11h51

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