Thread

Commits

  1. Test and document the behavior of initialization cross-refs in plpgsql.

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

    tomas@tuxteam.de — 2021-10-29T12:14:35Z

    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
    
  2. Re: plpgsql: can I use a variable in a DECLARE later whithin the DECLARE?

    Tom Lane <tgl@sss.pgh.pa.us> — 2021-10-29T14:04:31Z

    <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
    
    
    
    
  3. Re: plpgsql: can I use a variable in a DECLARE later whithin the DECLARE?

    tomas@tuxteam.de — 2021-10-29T14:50:30Z

    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