plpgsql: can I use a variable in a DECLARE later whithin the DECLARE?

Started by Nonameabout 4 years ago3 messages
#1Noname
tomas@tuxteam.de

Hi,

In plpgsql, i'm trying to use a variable initialised in a DECLARE in
a later initialisation expression whithin the same DECLARE:

DECLARE
x int := 23;
y int := x + 4
BEGIN
...

Experiments suggest that it works, but the docs are silent about that.
Is this a good idea, or should I be more careful and do it in a nested
block?

(For Lispers: is that a let, or a let*? ;-)

Thanks & cheers
- tomás

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: plpgsql: can I use a variable in a DECLARE later whithin the DECLARE?

<tomas@tuxteam.de> writes:

In plpgsql, i'm trying to use a variable initialised in a DECLARE in
a later initialisation expression whithin the same DECLARE:

DECLARE
x int := 23;
y int := x + 4
BEGIN
...

Experiments suggest that it works, but the docs are silent about that.
Is this a good idea, or should I be more careful and do it in a nested
block?

I don't see any reason to foresee that it would break.

However, I notice that we don't actually have any regression tests
checking this. scope_test() in plpgsql.sql checks an adjacent
question, but not exactly this one. I'm a bit inclined now to go
add such a test.

regards, tom lane

#3Noname
tomas@tuxteam.de
In reply to: Tom Lane (#2)
Re: plpgsql: can I use a variable in a DECLARE later whithin the DECLARE?

On Fri, Oct 29, 2021 at 10:04:31AM -0400, Tom Lane wrote:

<tomas@tuxteam.de> writes:

In plpgsql, i'm trying to use a variable initialised in a DECLARE in
a later initialisation expression whithin the same DECLARE:

DECLARE
x int := 23;
y int := x + 4
BEGIN
...

Experiments suggest that it works, but the docs are silent about that.
Is this a good idea, or should I be more careful and do it in a nested
block?

I don't see any reason to foresee that it would break.

Thanks :)

However, I notice that we don't actually have any regression tests
checking this. scope_test() in plpgsql.sql checks an adjacent
question, but not exactly this one. I'm a bit inclined now to go
add such a test.

Even more thanks.

After a long hiatus I have the luck to play again with PostgreSQL.
Let me say: you folks rock, seriously.

Cheers
- t