Hi Is there any elegant way not a two steps way I can output the cursor value at each step? testtbl table has this content col1 | col2 | col3 ------------+------------+------ E1 | CAT1 | 0 E1 | CAT2 | 0 E1 | CAT3 | 0 E4 | CAT1 | 0 E5 | CAT1 | 0 E6 | CAT1 | 0 E7 | CAT1 | 0 This works BEGIN WORK; DECLARE fooc CURSOR FOR SELECT * FROM testtbl; FETCH ALL FROM fooc; CLOSE fooc; COMMIT WORK; col1 | col2 | col3 ------------+------------+------ E1 | CAT1 | 0 E1 | CAT2 | 0 E1 | CAT3 | 0 E4 | CAT1 | 0 E5 | CAT1 | 0 E6 | CAT1 | 0 E7 | CAT1 | 0 But CREATE OR REPLACE FUNCTION foofunc() RETURNS text AS $$ DECLARE var2 RECORD; cur CURSOR FOR SELECT * from testtbl; BEGIN OPEN cur; LOOP FETCH cur INTO var2; return var2; END LOOP; CLOSE cur; END; $$ LANGUAGE plpgsql; select foofunc(); foofunc ------------------------------- ("E1 ","CAT1 ",0) But I am looking to get foofunc ------------------------------- ("E1 ","CAT1 ",0) ("E1 ","CATs ",0) etc Many thanks — Armand