Search Postgresql Archives

Re: plpgsql returning resultset

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



PostgreSQL has table partitioning in it so you don't have to dynamically
figure out which table to get the data from.

http://www.postgresql.org/docs/8.3/interactive/ddl-partitioning.html


However, you can achieve dynamic SQL in plpgsql too.  
http://www.postgresql.org/docs/8.3/interactive/ecpg-dynamic.html

Jon

> -----Original Message-----
> From: pgsql-general-owner@xxxxxxxxxxxxxx [mailto:pgsql-general-
> owner@xxxxxxxxxxxxxx] On Behalf Of Thomas Finneid
> Sent: Tuesday, September 02, 2008 4:19 PM
> To: pgsql-general@xxxxxxxxxxxxxx
> Cc: rod@xxxxxx
> Subject: Re: [GENERAL] plpgsql returning resultset
> 
> 
> Hi again, I tried to take the "with" form of the function further to
> complete the actual method and met with another error message which I
> dont understand.
> 
> I have a number for tables (partitioned) from which I need to retrieve
> data. Another table keeps track of which tables I should read from.
> The tables are named table_X, where X is 1-N. from that I want to
> retrieve some data from the selected tables and add it all into one
> resultset which I return to the client.
> 
> The code is as follows:
> 
> 
> create function get_profile(se_arg int4, st_arg int4, tr_arg int4)
> returns setof table_part as
> $$
> declare
> 	table_name 	text;
> 	val_list	table_part%rowtype;
> 	num_list	table_part_num_list%rowtype;
> begin
> 
> 	for num_list in	select num
> 			from table_part_num_list
> 			where se=se_arg
> 	loop
> 	   table_name := 'table_part_'|| num_list.num;
> 
> 	   select * into val_list
> 	   from table_name
> 	   where st=st_arg and tr=tr_arg;
> 
> 	   return next val_list;
> 	end loop;
> 
> 	return;
> end;
> $$ language 'plpgsql';
> 
> the error message I get when I try to create the function is:
> 
> 
> psql:functions.sql:159: ERROR:  syntax error at or near "$1"
> LINE 1: select * from  $1  where st= $2  and tr= $3
>                         ^
> QUERY:  select * from  $1  where st= $2  and tr= $3
> CONTEXT:  SQL statement in PL/PgSQL function "get_profile" near line
15
> 
> Any ideas what I am doing wrong?
> 
> regards
> 
> thomas
> 
> 
> --
> Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux