Re: FW: execute dynamic strings. need help.

From: Stefan(dot)Ardeleanu(at)siveco(dot)ro
To: dev(at)archonet(dot)com, 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 16:25:25
Message-ID: E383500F7C4E70448157685481BF824801A9E9E4@internets3.main.siveco.ro
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thank you very, very much. It works.
Do you know if exista another similar possibility do resolve this problem
without need to know the columns types?
In JDBC, when calling this function, you have to know these column types?
Thanks in advanced for everything.

Stefan Ardeleanu
Siveco

-----Original Message-----
From: Richard Huxton [mailto:dev(at)archonet(dot)com]
Sent: 22 februarie 2005 17:44
To: Stefan(dot)Ardeleanu(at)siveco(dot)ro
Cc: pgsql-general(at)postgresql(dot)org
Subject: Re: FW: [GENERAL] execute dynamic strings. need help.

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

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Phil Endecott 2005-02-22 16:31:21 Re: Triggers, again.. ;-)
Previous Message Tom Lane 2005-02-22 16:15:59 Re: vacuuming slow