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

PostgreSQL Discussion :

loop et traitement pgsql


Sujet :

PostgreSQL

  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut loop et traitement pgsql
    Bonjour,

    j'aimerais faire une fonction pgsql contenant un loop d'une fonction renvoyant des lignes d'un tableau.
    Pour chacune de ces lignes j'aimerais faire un deuxiement traitement. Sauf que je ne sais pas comment faire pour lire les donnees d'un loop...

    Si vous pouviez me donner une idee ... merci

    Exemple
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    CREATE TABLE truc
    (
      id_truc integer,
      sousid_truc integer,
      nom_truc text
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE truc OWNER TO postgres;
     
     
    CREATE OR REPLACE FUNCTION obtenirTousLesTrucs() RETURNS SETOF tructest AS
    $BODY$
    DECLARE
        r tructest%rowtype;
    BEGIN
        FOR r IN SELECT * FROM truc
        WHERE id_truc > 0
        LOOP
            -- quelques traitements
            RETURN NEXT r; -- renvoie la ligne courante du SELECT
        END LOOP;
        RETURN;
    END
    $BODY$
    LANGUAGE 'plpgsql' ;
     
     
    CREATE OR REPLACE FUNCTION obtenirTousLesTrucs2() RETURNS integer AS
    $BODY$
    DECLARE
        r tructest%rowtype;
    test integer;
    BEGIN
        FOR r IN SELECT * FROM obtenirTousLesTrucs()
        LOOP
            -- quelques traitements
     
            INSET INTO machin (montext) VALUES (r.nom_truc);
        END LOOP;
        RETURN;
    END
    $BODY$
    LANGUAGE 'plpgsql' ;
     
    SELECT * FROM obtenirTousLesTrucs2();

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    C'est bon je pense que j'ai trouve£.
    Desole du derangement
    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
     
    CREATE OR REPLACE FUNCTION obtenirTousLesTrucs() RETURNS SETOF tructest AS
    $BODY$
    DECLARE
        r tructest%rowtype;
    BEGIN
        FOR r IN SELECT * FROM truc
        WHERE id_truc > 0
        LOOP
            -- quelques traitements
            RETURN NEXT r; -- renvoie la ligne courante du SELECT
        END LOOP;
        RETURN;
    END
    $BODY$
    LANGUAGE 'plpgsql' ;
     
     
    CREATE OR REPLACE FUNCTION obtenirTousLesTrucs2() RETURNS SETOF tructest AS
    $BODY$
    DECLARE
        r tructest%rowtype;
    test integer;
    BEGIN
        FOR r IN SELECT * FROM obtenirTousLesTrucs()
        LOOP
            -- quelques traitements
    	if(r.id_truc = 1) THEN
            RETURN NEXT r; -- renvoie la ligne courante du SELECT
            END IF;
        END LOOP;
        RETURN;
    END
    $BODY$
    LANGUAGE 'plpgsql' ;
     
    SELECT * FROM obtenirTousLesTrucs2();

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PL/Pgsql] Erreur de LOOP
    Par yo_haha dans le forum Débuter
    Réponses: 3
    Dernier message: 04/07/2011, 15h59
  2. [SSIS] [2K5] ForEach Loop ou traitements en série
    Par MoitieDeCigare dans le forum SSIS
    Réponses: 2
    Dernier message: 19/03/2010, 17h14
  3. [loop] ralentir le traitement d'une boucle
    Par jontleman dans le forum Windows Forms
    Réponses: 7
    Dernier message: 30/11/2007, 14h34
  4. Rafraichissement de la fenetre pendant le traitement
    Par Bobx dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/02/2003, 15h13
  5. Matrice de filtrage ?
    Par gimlithedwarf dans le forum Traitement d'images
    Réponses: 2
    Dernier message: 24/08/2002, 09h44

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