Re: Dynamic binding in plpgsql function - Mailing list pgsql-general

From Pavel Stehule
Subject Re: Dynamic binding in plpgsql function
Date
Msg-id AANLkTikmzTNN2z6ZLd8u6erSgM1-GSN8iH-WZTQd+h8Z@mail.gmail.com
Whole thread Raw
In response to Dynamic binding in plpgsql function  (Pierre Racine <Pierre.Racine@sbf.ulaval.ca>)
Responses Re: Dynamic binding in plpgsql function  (Merlin Moncure <mmoncure@gmail.com>)
List pgsql-general
Hello

2011/3/2 Pierre Racine <Pierre.Racine@sbf.ulaval.ca>:
> Hi,
>
> I would like to write a generic plpgsql function with a text parameter being a callback function name so that my
generalfunction 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

regards

Pavel Stehule

>        RETURN x;
>    END;
>    $$ LANGUAGE 'plpgsql';
>
> I don't want to do an EXECUTE statement since I have no table to put after the FROM clause. I want to assign the
resultingvalue directly to a variable like in my example. 
>
> Can I/How can I achieve this?
>
> Thanks,
>
> Pierre
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

pgsql-general by date:

Previous
From: Pierre Racine
Date:
Subject: Dynamic binding in plpgsql function
Next
From: Vibhor Kumar
Date:
Subject: Re: Dynamic binding in plpgsql function