Nested funtion

Started by Sridhar N Bamandlapallyalmost 10 years ago3 messages
#1Sridhar N Bamandlapally
sridhar.bn1@gmail.com

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

#2Pavel Stehule
pavel.stehule@gmail.com
In reply to: Sridhar N Bamandlapally (#1)
Re: [HACKERS] Nested funtion

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

Show quoted text

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

#3David G. Johnston
david.g.johnston@gmail.com
In reply to: Sridhar N Bamandlapally (#1)
Re: Nested funtion

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.