Обсуждение: table name as function argument?

Поиск
Список
Период
Сортировка

table name as function argument?

От
"Les Carter"
Дата:
This is a multi-part message in MIME format.

--bound1107656464
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 7bit

Hi,  I'm fairly new to postgres and was wondering how would I go about using an argument passed into a user function to
referto a table. 

As an example, consider the code below where I want to see if a table has any rows in it (this isn't what I'm trying to
achievebut just the easiest thing I could think of to demonstrate what my problem is). 

CREATE OR REPLACE FUNCTION istableempty("varchar", "char")
RETURNS bool AS
DECLARE
  found int2;
BEGIN
  SELECT into found count(*) FROM $1 WHERE rowid=$2;
  IF found = 0
  THEN
    RETURN true;
  ELSE
    RETURN false;
  END IF;
END

If I try to run, it tells me I have an error at or near the $1

Can anyone cast some light as to how I might be able to use an argument to refer to a table?

Thanks,

L

--bound1107656464--


Re: table name as function argument?

От
John DeSoi
Дата:
Les,

On Feb 5, 2005, at 9:21 PM, Les Carter wrote:

> Hi,  I'm fairly new to postgres and was wondering how would I go about
> using an argument passed into a user function to refer to a table.
>
> As an example, consider the code below where I want to see if a table
> has any rows in it (this isn't what I'm trying to achieve but just the
> easiest thing I could think of to demonstrate what my problem is).

You need to use EXECUTE for cases where the table references cannot be
resolved when the function is created. See:

http://www.postgresql.org/docs/8.0/interactive/plpgsql-
statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

Note that EXECUTE can't return results, but this section points you to
the relevant solutions.



John DeSoi, Ph.D.
http://pgedit.com/
Power Tools for PostgreSQL