Re: table name as parameter in pl/psql - Mailing list pgsql-admin

From Stephan Szabo
Subject Re: table name as parameter in pl/psql
Date
Msg-id 20011210134736.D70079-100000@megazone23.bigpanda.com
Whole thread Raw
In response to table name as parameter in pl/psql  ("darthxiong@libero.it" <darthxiong@libero.it>)
List pgsql-admin
On Mon, 10 Dec 2001, [utf-8] darthxiong@libero.it wrote:

>
> hi all, i'm trying to do something like this:
>
> CREATE FUNCTION read_table(text) RETURNS int AS '
>  DECLARE
>          table_name ALIAS FOR $1;
>           res
>   INTERGER;
>  BEGIN
>           SELECT INTO res COUNT(id) FROM table_name;
>           RETURN res;
>  END;
>  ' LANGUAGE 'plpgsql';
>
> using psql the creation return no errors, but the statement
>  SELECT read_table( 'books' ) AS how_many;
>  resuts in
>  ERROR: parser: parse error at or near "$1"
>
> and the same using
> SELECT INTO res COUNT(id) FROM $1;
>  instead of
> SELECT INTO res COUNT(id) FROM table_name;
>  while
> SELECT INTO res COUNT(id) FROM books ( the real name of the table )
>  works good

You need to look into using EXECUTE if you want to specify tables
on the fly, and you may need something like:
create function read_table(text) returns int as '
declare
 table_name alias for $1;
 rec record;
begin
 for rec in EXECUTE ''select count(*) from '' || table_name LOOP
  return rec.count;
 END LOOP;
 return 0;
end;' language 'plpgsql';



pgsql-admin by date:

Previous
From: Stephan Szabo
Date:
Subject: Re: Primary Key Problems
Next
From: "Heather Johnson"
Date:
Subject: problems doing sub-selects on PostgreSQL 7.1.3 and Solaris 7