On 6/3/21 12:01 PM, Bruce Momjian wrote:
On Thu, Jun  3, 2021 at 08:58:03PM +0200, Marc Millas wrote:
Hi,

within a function, I want to create another function.
no pb.
but if I write:
declare bidule text;
begin
bidule:='myfunc';
create function bidule() ...


it does create a function named bidule and not myfunc.
so I am obviously missing something too obvious.

You can't create functions inside of functions;  same for procedures.


Sure you can:

CREATE OR REPLACE FUNCTION public.test_fnc()
 RETURNS void
 LANGUAGE plpgsql
AS $function$
DECLARE
     bidule text;
BEGIN
bidule:='myfunc';
EXECUTE 'create function ' || bidule || '() RETURNS void language plpgsql AS $fnc$ BEGIN END; $fnc$ ';
END;


$function$

select test_fnc();
 test_fnc
----------

 \df myfunc
                        List of functions
 Schema |  Name  | Result data type | Argument data types | Type
--------+--------+------------------+---------------------+------
 public | myfunc | void             |                     | func


Whether you should is another question.


--
Adrian Klaver
adrian.kla...@aklaver.com


Reply via email to