Thread: Nested funtion

Nested funtion

From
Sridhar N Bamandlapally
Date:
Hi

Is there any way to create nested function?

oracle to postgres migration required super function variable reference into nested function without nested function parameter

Oracle sample:
-------------------------------
create or replace function f1(n number) return number
is
    vs number:=1;
    function nf1(m number) return number is
    begin
        return vs + m + n;
    end;
begin
    return nf1(2);
end;
/

run:
--------
SQL> select f1(9) from dual;

     F1(9)
----------
        12



Thanks
Sridhar BN

Re: Nested funtion

From
Pavel Stehule
Date:
Hi

2016-03-28 6:14 GMT+02:00 Sridhar N Bamandlapally <sridhar.bn1@gmail.com>:
Hi

Is there any way to create nested function?

Some languages supports this feature, like plv8, but plpgsql doesn't support it,

You have to use two function and some implementation of session variables.

Regards

Pavel 

oracle to postgres migration required super function variable reference into nested function without nested function parameter

Oracle sample:
-------------------------------
create or replace function f1(n number) return number
is
    vs number:=1;
    function nf1(m number) return number is
    begin
        return vs + m + n;
    end;
begin
    return nf1(2);
end;
/

run:
--------
SQL> select f1(9) from dual;

     F1(9)
----------
        12



Thanks
Sridhar BN

Re: Nested funtion

From
"David G. Johnston"
Date:
On Sun, Mar 27, 2016 at 9:14 PM, Sridhar N Bamandlapally <sridhar.bn1@gmail.com> wrote:
Hi

Is there any way to create nested function?

oracle to postgres migration required super function variable reference into nested function without nested function parameter

Oracle sample:
-------------------------------
create or replace function f1(n number) return number
is
    vs number:=1;
    function nf1(m number) return number is
    begin
        return vs + m + n;
    end;
begin
    return nf1(2);
end;
/

run:
--------
SQL> select f1(9) from dual;

     F1(9)
----------
        12


PostgreSQL's ​pl/pgsql langauge doesn't grok closures.  You are welcome to write "f1" in a language that does.  Perl and Python are built-in and many others are available.  I assume at least one of them can do this.

​David J.