PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » [Résolu] Comment extraire des champ d'un type record » 25/07/2012 18:04:15

Petite information complémentaire : la fonction a également été modifiée pour prendre en entrée un tableau ... désolé pour l'oubli
HackuH

#2 Re : Général » [Résolu] Comment extraire des champ d'un type record » 25/07/2012 10:29:13

Bonjour,

Merci gleu pour ta réponse.
Cependant, j'avais essayé cette solution mais j'avais le même résulta soit un record.

Ce matin après une bonne petite prise de tête, j'ai trouvé une solution :

select * from "POUET"(all(select (array_accum("IDREJET")) as tst from "REJET" where "DTREJ" = '2012-06-26'))

Bonne journée à tous

HackuH

#3 Général » [Résolu] Comment extraire des champ d'un type record » 24/07/2012 15:41:57

HackuH
Réponses : 3

Bonjour,

J'aurais besoin d'aide concernant un petit soucis de sortie d'informations, je m'explique :

J'ai une fonction qui prend en paramètre un entier et qui me retourne une table.
Puis je fais une requête appelant cette fonction et cela me retourne un record pour chaque tuple.

Est-il possible d'obtenir le même affichage que le résultat de ma fonction initiale ?
Merci de votre aide.

Ci-dessous les différents morceau de code (bon, on dira rien sur l'optimisation ... :-) ):

la fonction :
CREATE OR REPLACE FUNCTION "POUET"(IN _idrejet integer DEFAULT (-1))
  RETURNS TABLE("1" integer, "2" integer, "3" integer, "DTE" date, "A CLOTURER" boolean) AS
$BODY$



/************************************************************
CTE
************************************************************/
with

_lst_adh as (
select
    reg."ADH" as "1",
    rel."ADH" as "2"
from
    "REJET" rej
    join "RGLT" reg using ("REGL")
    join "RELAT" rel on rel."ADH_1" = reg."ADH"
where
    CASE when $1 = -1 THEN rej."DTREJ" =(select max("DTREJ") from "ADH_REJET")
    ELSE rej."IDREJ" = $1 end
),
/************************************************************
écéhance(s) due(s)
************************************************************/
_lst_ech_due as (
select
    distinct *,("AN"||'-'||"MOIS"||'-01')::date as "DTE"
from
    _lst_adh
    join "ECHE" ech using ("IDADH")
where
    "SOLDE"("IDECH") > 0
),
/************************************************************
4 echeances consécutives rejetées
************************************************************/
_lst_4_ech_due_consecutives as (
select "1","2","3",min("DTE") as "DTE"
from _lst_ech_due a
where
("DTE" - interval '1 month')::date in (select "DTE" from _lst_ech_due where "1"=a."1" and "2"=a."2" and "3"= a."3")
and ("DTE" - interval '2 month')::date in (select "DTE" from _lst_ech_due where "1"=a."1" and "2"=a."2" and "3"= a."3")
and ("DTE" - interval '3 month')::date in (select "DTE" from _lst_ech_due where "1"=a."1" and "2"=a."2" and "3"= a."3")
group by "1","2","3"
order by "1","2","3","DTE")

/************************************************************
resultat
************************************************************/

select "1","2","3",min("DTE") as "DTE" ,false as "A CLOTURER"
from _lst_ech_due a 
where (select count(*) from _lst_4_ech_due_consecutives where "1"=a."1" and "2"=a."2" and "3"= a."3") = 0
GROUP BY "1","2","3"
union
select *,true from _lst_4_ech_due_consecutives
order by "1","2","3";

la requête qui m'embête :
select "POUET"("IDREJET") from "ADH_REJET" where "DTREJ" = '2012-06-26'

Pied de page des forums

Propulsé par FluxBB