Hello group,

I've got a new problem where I hope someone can give me a solution.

I have witten a function which should give back a type created by me. To get
the data into the type, I have to go through a loop, which holds other
loops.
Simplified (not really), it looks like this:

CREATE OR REPLACE FUNCTION getregistrationtagging()
 RETURNS SETOF ty_usertrackung AS
$BODY$
DECLARE objReturn ty_usertrackung%rowtype;
DECLARE objDate ty_trackdate%rowtype;
DECLARE objTag ty_tagtype%rowtype;
DECLARE objDesignid ty_designidtype%rowtype;
BEGIN
       for objDate IN
        SELECT     date_part('day',trackdate) as iDay,
           date_part('month',trackdate) as iMonth,
           date_part('year',trackdate) as iYear
        FROM tbl_usertracking_registration
        GROUP BY     date_part('day',trackdate),
               date_part('month',trackdate),
               date_part('year',trackdate)
          loop
                for obTag IN
                 SELECT  tag as ty_tag
                 FROM tbl_usertracking_registration
                 WHERE date_part('day',trackdate)=objDate.iDay
                 AND date_part('month',trackdate)=objDate.iMonth
                AND date_part('year',trackdate)=objDate.iYear
               GROUP BY tag
           loop
              for objDesignid IN
                  SELECT designid as ty_designid
                 FROM tbl_usertracking_registration
                  WHERE date_part('day',trackdate)=objDate.iDay
                 AND date_part('month',trackdate)=objDate.iMonth
                 AND date_part('year',trackdate)=objDate.iYear
                 AND tag=objTag.ty_tag
                 GROUP BY designid
             loop

               objReturn.ty_designid := objDesignid.ty_designid;
               objReturn.ty_tag := objTag.ty_tag;
               SELECT INTO objReturn.ty_count count(*) FROM FROM
tbl_usertracking_registration
                   WHERE date_part('day',trackdate)=objDate.iDay
                   AND date_part('month',trackdate)=objDate.iMonth
                   AND date_part('year',trackdate)=objDate.iYear
                   AND tag=objTag.ty_tag
                   AND designid=objDesignid.ty_designid;
                   return objReturn;
           END LOOP;
       END LOOP;
    END LOOP;
END;
$BODY$
 LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION getregistrationtagging() OWNER TO postgres;

Well, there are probably other ways (probably more grouping) to select the
data I need. My brain came up with this solution, but it doesn't work and
postgres gives back »loop variable of loop over rows must be record or row
variable« as the error message. I don't know what it wants to tell me so any
input is welcime.

Thanks in advance
Mo

Reply via email to