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

Requêtes PostgreSQL Discussion :

Besoin d'aide pour fonction


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre à l'essai
    Besoin d'aide pour fonction
    Bonjour,

    J'aurais besoin d'aide pour un exercice. Je dispose d'une table contenant une liste de film (titrefilm, duree, annee...) J'aimerais créer une fonction qui me retourne la liste des films (donc titrefilm) + la durée (duree). Mais malgré plusieurs tentatives je n'y arrives pas, j'utilise une boucle for mais elle me renvoi le dernier film de ma table...

    Voici ce que j'ai fais :

    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
    create function liste_duree_film() returns character varying
    AS '
    DECLARE
     
        rec RECORD;
        result VARCHAR;
     
    BEGIN
     
     
        for rec in (select duree, titrefilm
                    from film)
        loop
            result := rec.titrefilm||'' ''||rec.duree;
     
        end loop;
     
        return result;
     
     
     
    END;
    ' LANGUAGE 'plpgsql';

  2. #2
    Membre éprouvé
    Le langage pl/pgsql est overkill pour ça, en sql simple :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create function liste_duree_film() returns record
    as $$
    select * from film;
    $$ language sql;

  3. #3
    Membre à l'essai
    Malheureusement cela fait partie de mes contraintes d'utiliser ce langage ...

  4. #4
    Membre éprouvé
    Citation Envoyé par Nicodu10 Voir le message
    Malheureusement cela fait partie de mes contraintes d'utiliser ce langage ...
    Pour un exercice pareil c'est inadapté, mais soit.
    Tu peux retourner en pl/pgsql aussi des tables, pas besoin d'itérer à la main comme tu le fais, on évite la programmation par curseur à tout prix en base de données.

    Si tu ne trouves rien, et hop :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    create or replace function liste_duree_film() returns table (titrefilm ton_type, duree ton_type) as
    $func$
    begin
      return query
      select f.titrefilm, f.duree
      from film f;
    end
    $func$
    language plpgsql;