On Thursday 24 July 2003 13:46, [EMAIL PROTECTED] wrote:
> I'm interested in producing a list of all sequence names and the
> corresponding last value. Starting with a list of sequence names
> generated by
>
> SELECT c.relname FROM pg_class c WHERE (c.relkind = 'S');
[snip]
> So my next try used a function defined as
>
> CREATE FUNCTION public.get_sequence_last_value(name) RETURNS int4 AS '
> DECLARE
>   ls_sequence ALIAS FOR $1;
>   lr_record RECORD;
>   li_return INT4;
> BEGIN
>   FOR lr_record IN EXECUTE ''SELECT last_value FROM '' || ls_sequence LOOP
>     li_return := lr_record.last_value;
>   END LOOP;
>   RETURN li_return;
> END;'  LANGUAGE 'plpgsql' VOLATILE;
>
> Followed by
>
> SELECT c.relname, get_sequence_last_value(c.relname)
> FROM pg_class c WHERE (c.relkind = 'S');
>
> Which works and produces the result I want, but that function seems
> really messy. Is there a cleaner way to do this?

Why not just have two (nested) loops in the function?

FOR class_rec IN SELECT c.relname FROM pg_class WHERE c.relkind=''S'' LOOP
  FOR lr_record IN EXECTUTE ... || class_rec.relname... LOOP
  ...
  END LOOP
END LOOP

Or am I missing something?
-- 
  Richard Huxton
  Archonet Ltd

---------------------------(end of broadcast)---------------------------
TIP 9: the planner will ignore your desire to choose an index scan if your
      joining column's datatypes do not match

Reply via email to