Re: PL/pgSQL doesn't support variables in queries? - Mailing list pgsql-general

From Erik Wienhold
Subject Re: PL/pgSQL doesn't support variables in queries?
Date
Msg-id 658455455.1152531.1683117585087@office.mailbox.org
Whole thread Raw
In response to PL/pgSQL doesn't support variables in queries?  ("J.A." <postgresql@world-domination.com.au>)
Responses Re: PL/pgSQL doesn't support variables in queries?  ("J.A." <postgresql@world-domination.com.au>)
List pgsql-general
> On 03/05/2023 14:25 CEST J.A. <postgresql@world-domination.com.au> wrote:
>
> ms-sql person here migrating over to pgsql. One of the first thing's I noticed
> with pgsql (or more specifically, PL/pgSQL) is that it doesn't support
> "variables" in a query?
>
> for example, here's some T-SQL:
>
> DECLARE @fkId INTEGER
>
> SELECT @fkId = fkId FROM SomeTable WHERE id = 1
>
> -- and then do something with that value..
>
> SELECT * FROM AnotherTable WHERE Id = @fkId
> SELECT * FROM YetAnotherTable WHERE FKId = @fkId
> -- etc..

plpgsql does support variable declarations [0] but does not use any special
notation like T-SQL.  An equivalent to your example would be:

    DO $$
    DECLARE
      v_fkid int;
      v_rec record;
    BEGIN
      SELECT fkid INTO v_fkid FROM SomeTable WHERE id = 1;
      SELECT * INTO v_rec FROM AnotherTable WHERE Id = v_fkid;
      -- Do something with v_rec ...
    END $$;

Prefixing variable names with v_ is just a convention to avoid ambiguous column
references (assuming that column names are not prefixed with v_) [1].

[0] https://www.postgresql.org/docs/current/plpgsql-declarations.html
[1] https://www.postgresql.org/docs/current/plpgsql-implementation.html#PLPGSQL-VAR-SUBST

--
Erik



pgsql-general by date:

Previous
From: Michael Loftis
Date:
Subject: Re: libpq and multi-threading
Next
From: "J.A."
Date:
Subject: Re: PL/pgSQL doesn't support variables in queries?