PL/pgSQL: recursion?

From: "Albert REINER" <areiner(at)tph(dot)tuwien(dot)ac(dot)at>
To: PostgreSQL-SQL <pgsql-sql(at)postgreSQL(dot)org>
Subject: PL/pgSQL: recursion?
Date: 2001-01-02 21:31:36
Message-ID: 20010102223136.A1265@frithjof
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Saluton,

is there any possibility to do recursion in plpgsql-functions? Here is
what I tried (I know that I can do it with a simple loop, of course; I
am just curious about what one can or cannot do in plpgsql):

,----[ test-recursion ]
| drop table ttt;
| create table ttt
| ( id int4,
| pid int4 );
|
| insert into ttt values (1, NULL);
| insert into ttt values (2, NULL);
| insert into ttt values (3, 1);
| insert into ttt values (4, 1);
| insert into ttt values (5, 1);
| insert into ttt values (6, 2);
| insert into ttt values (7, 2);
|
| drop function idPath(int4);
| create function idPath(int4) returns text as '
| declare
| str text;
| str2 text;
| r record;
| begin
| select id, pid into r from ttt where id = $1;
| str := r.id::text;
| if r.pid IS NOT NULL then
| str2 := idPath(r.id);
| str := str || '':'' || str2;
| end if;
| return str;
| end;' language 'plpgsql';
|
`----

And when I tried to use it, I got:

,----
| select idPath(5);
| pqReadData() -- backend closed the channel unexpectedly.
| This probably means the backend terminated abnormally
| before or while processing the request.
| The connection to the server was lost. Attempting reset: Failed.
`----

I'm running Postgres 7.0.2.

Thanks in advance,

Albert.

--

--------------------------------------------------------------------------
Albert Reiner <areiner(at)tph(dot)tuwien(dot)ac(dot)at>
Deutsch * English * Esperanto * Latine
--------------------------------------------------------------------------

Responses

Browse pgsql-sql by date

  From Date Subject
Next Message The Hermit Hacker 2001-01-02 21:47:33 Re: Release date for 7.5?
Previous Message Diehl, Jeffrey 2001-01-02 21:28:20 Release date for 7.5?