dbTalk Databases Forums  

[SQL] plpgsql loop question

mailing.database.pgsql-sql mailing.database.pgsql-sql


Discuss [SQL] plpgsql loop question in the mailing.database.pgsql-sql forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
Andrea Visinoni
 
Posts: n/a

Default [SQL] plpgsql loop question - 02-10-2010 , 10:29 AM






hi,
i have a table called "zones": idzone, zone_name
and several tables called zonename_records (same structure), where
zonename is one of the zone_name in the "zones" table.
What i want to do is a function that union all of this tables
dinamically based on "zones" table, this is what i've done so far:

CREATE OR REPLACE FUNCTION get_all_records()
RETURNS SETOF record AS
$BODY$DECLARE
zones record;
recs record;
BEGIN
for zones in select lower(zone_name) as n from zones loop
for recs in select * from quote_ident(zones.n || '_records') loop
return next recs;
end loop;
end loop;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

but i get this error!

ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "get_all_records" line 9 at RETURN NEXT

Andrea

--
Sent via pgsql-sql mailing list (pgsql-sql (AT) postgresql (DOT) org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply With Quote
  #2  
Old   
Justin Graf
 
Posts: n/a

Default Re: [SQL] plpgsql loop question - 02-10-2010 , 11:16 AM






On 2/10/2010 11:29 AM, Andrea Visinoni wrote:
Quote:
hi,
i have a table called "zones": idzone, zone_name
and several tables called zonename_records (same structure), where
zonename is one of the zone_name in the "zones" table.
What i want to do is a function that union all of this tables
dinamically based on "zones" table, this is what i've done so far:

CREATE OR REPLACE FUNCTION get_all_records()
RETURNS SETOF record AS
$BODY$DECLARE
zones record;
recs record;
BEGIN
for zones in select lower(zone_name) as n from zones loop
for recs in select * from quote_ident(zones.n || '_records') loop
return next recs;
end loop;
end loop;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

but i get this error!

ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "get_all_records" line 9 at RETURN NEXT

Andrea

Pg will not auto build the columns outputted from generic type record.
The function needs to describe what the output is going to look like.

The function can inherit the layout from a table or create the new pg
data type but PG does not know what the data looks like to create the
result set. .


All legitimate Magwerks Corporation quotations are sent in a .PDF file attachment with a unique ID number generated by our proprietary quotation system. Quotations received via any other form of communication will not be honored.

CONFIDENTIALITY NOTICE: This e-mail, including attachments, may contain legally privileged, confidential or other information proprietary to Magwerks Corporation and is intended solely for the use of the individual to whom it addresses. If the reader of this e-mail is not the intended recipient or authorized agent, the reader is hereby notified that any unauthorized viewing, dissemination, distribution or copying of this e-mail is strictly prohibited. If you have received this e-mail in error, please notify the sender by replying to this message and destroy all occurrences of this e-mail immediately.
Thank you.


--
Sent via pgsql-sql mailing list (pgsql-sql (AT) postgresql (DOT) org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply With Quote
  #3  
Old   
Adrian Klaver
 
Posts: n/a

Default Re: [SQL] plpgsql loop question - 02-10-2010 , 02:56 PM



On 02/10/2010 08:29 AM, Andrea Visinoni wrote:
Quote:
hi,
i have a table called "zones": idzone, zone_name
and several tables called zonename_records (same structure), where
zonename is one of the zone_name in the "zones" table.
What i want to do is a function that union all of this tables
dinamically based on "zones" table, this is what i've done so far:

CREATE OR REPLACE FUNCTION get_all_records()
RETURNS SETOF record AS
$BODY$DECLARE
zones record;
recs record;
BEGIN
for zones in select lower(zone_name) as n from zones loop
for recs in select * from quote_ident(zones.n || '_records') loop
return next recs;
end loop;
end loop;
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

but i get this error!

ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "get_all_records" line 9 at RETURN NEXT

Andrea

One thing I would do is rename your zones record variable. pgsql does
not deal well with a variable having the same name as a schema object,
in this case your table zones.

--
Adrian Klaver
adrian.klaver (AT) gmail (DOT) com

--
Sent via pgsql-sql mailing list (pgsql-sql (AT) postgresql (DOT) org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-sql

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.