Re: Dynamic binding in plpgsql function

Поиск
Список
Период
Сортировка
От Merlin Moncure
Тема Re: Dynamic binding in plpgsql function
Дата
Msg-id AANLkTikNwpmZbQ9tfibUaRwCxdmHzwno6bgT15boMwD_@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Dynamic binding in plpgsql function  (Pavel Stehule <pavel.stehule@gmail.com>)
Ответы Re: Dynamic binding in plpgsql function  (Dmitriy Igrishin <dmitigr@gmail.com>)
Список pgsql-general
On Tue, Mar 1, 2011 at 5:17 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:
> 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

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

В списке pgsql-general по дате отправления:

Предыдущее
От: "chris r."
Дата:
Сообщение: Re: pg_dump slow with bytea data
Следующее
От: Dmitriy Igrishin
Дата:
Сообщение: Re: Dynamic binding in plpgsql function