Re: FW: execute dynamic strings. need help.

From: Richard Huxton <dev(at)archonet(dot)com>
To: Stefan(dot)Ardeleanu(at)siveco(dot)ro
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: FW: execute dynamic strings. need help.
Date: 2005-02-22 15:43:58
Message-ID: 421B533E.8040409@archonet.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Stefan(dot)Ardeleanu(at)siveco(dot)ro wrote:
> I have a function with 3 parameters (select clause, where clause and order
> by clause (last two are optionally clauses). This clauses apply to a given
> table. For example, the table table1
>
> and the function table1_rwc (read by where clause).
> Given, let's say, the followings values select_clause = '*', where_clause
> 'id = 1' and the order_by clause = 'id', it will be generate the result set
> of the following query:
>
> select * from Table1 where id = 1 order by id
>
> I know I must use execute and prepare syntax, but I don't know how to create
> the function.
> Can you help me, please.

Something like (not tested):

CREATE FUNCTION my_exec(text,text,text) RETURNS SETOF RECORD AS '
DECLARE
qry text;
r RECORD;
BEGIN
qry := ''SELECT '' || $1 || '' FROM Table1 WHERE '' || $2 || '' ORDER
BY '' || $3;
FOR r IN EXECUTE qry LOOP
RETURN NEXT r;
END LOOP;
RETURN;
END;
' LANGUAGE plpgsql;

Then something like:
SELECT * FROM my_exec('*','id=1','id') AS (a int, b text, c, date);

That's assuming a,b,c have the correct types. You will need to know what
types you are returning though.

--
Richard Huxton
Archonet Ltd

In response to

Browse pgsql-general by date

  From Date Subject
Next Message FERREIRA William (COFRAMI) 2005-02-22 15:55:59 Re: rows and array
Previous Message Joe Maldonado 2005-02-22 15:38:55 vacuuming slow