From: | Merlin Moncure <mmoncure(at)gmail(dot)com> |
---|---|
To: | Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> |
Cc: | Pierre Racine <Pierre(dot)Racine(at)sbf(dot)ulaval(dot)ca>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Dynamic binding in plpgsql function |
Date: | 2011-03-02 14:30:12 |
Message-ID: | AANLkTikNwpmZbQ9tfibUaRwCxdmHzwno6bgT15boMwD_@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
On Tue, Mar 1, 2011 at 5:17 PM, Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> wrote:
> Hello
>
> 2011/3/2 Pierre Racine <Pierre(dot)Racine(at)sbf(dot)ulaval(dot)ca>:
>> Hi,
>>
>> I would like to write a generic plpgsql function with a text parameter being a callback function name so that my general function can call this callback function. e.g.:
>>
>> CREATE OR REPLACE FUNCTION ST_MyCallbackFunction(y int)
>> RETURNS int AS $$
>> DECLARE
>> BEGIN
>> RETURN someCalculationBasedOnY;
>> END;
>> $$ LANGUAGE 'plpgsql';
>>
>> CREATE OR REPLACE FUNCTION ST_MyGeneralFunction(callback text)
>> RETURNS SETOF geomval AS $$
>> DECLARE
>> x integer;
>> y integer;
>> BEGIN
>> y := somecalculation;
>> x := 'callback'(y); --This is what I need
>
> EXECUTE 'SELECT ' || callback || '($1)' USING y INTO x;
>
> there are no other way than EXECUTE
>
> attention - there is a sql injection risk
another way if you are willing to write some C is to wrap and expose
OidFunctionCall1 so it takes oid of function you want to call.
merlin
From | Date | Subject | |
---|---|---|---|
Next Message | suresh ramasamy | 2011-03-02 14:31:00 | how are you? |
Previous Message | chris r. | 2011-03-02 08:47:50 | Re: pg_dump slow with bytea data |