From: | Erik Wienhold <ewie(at)ewie(dot)name> |
---|---|
To: | "J(dot)A(dot)" <postgresql(at)world-domination(dot)com(dot)au>, pgsql-general(at)lists(dot)postgresql(dot)org |
Subject: | Re: PL/pgSQL doesn't support variables in queries? |
Date: | 2023-05-03 12:39:45 |
Message-ID: | 658455455.1152531.1683117585087@office.mailbox.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
> On 03/05/2023 14:25 CEST J.A. <postgresql(at)world-domination(dot)com(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | J.A. | 2023-05-03 12:51:25 | Re: PL/pgSQL doesn't support variables in queries? |
Previous Message | Michael Loftis | 2023-05-03 12:35:26 | Re: libpq and multi-threading |