Re: table name as parameter in pl/psql

From: Stephan Szabo <sszabo(at)megazone23(dot)bigpanda(dot)com>
To: darthxiong(at)libero(dot)it <darthxiong(at)libero(dot)it>
Cc: <pgsql-admin(at)postgresql(dot)org>
Subject: Re: table name as parameter in pl/psql
Date: 2001-12-10 21:54:00
Message-ID: 20011210134736.D70079-100000@megazone23.bigpanda.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin


On Mon, 10 Dec 2001, [utf-8] darthxiong(at)libero(dot)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';

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Heather Johnson 2001-12-10 21:56:48 problems doing sub-selects on PostgreSQL 7.1.3 and Solaris 7
Previous Message Stephan Szabo 2001-12-10 21:47:23 Re: Primary Key Problems