Thread: variables in pgSQL?

variables in pgSQL?

From
Heinz Hemken
Date:
The following is legal in MS SQL:

declare @user_id int
select @user_id = user_id from masterindex_table where masterindexid = 1

whereupon the local variable can be used for other things. Is there
anything similar in pgSQL? I want to have a user table for a web
database, and I want to be able to do a begin/commit block where I 1)
check to see if the user exists in an account table, 2) if not, get the
next available userid from a master index table, 3) add a new userid to
the account table for the new user, and 4) increment the userid field in
the master index table. I want this to occur all within a single
transaction block so that no race conditions exist, and the masterindex
table is only being used by one process at a time for the whole
operation.

How can I do this in postgresql? Is there a better approach?

-- 
Heinz Hemken
IFC Capital Corporation
San Diego, California


Re: [SQL] variables in pgSQL?

From
Chris Bitmead
Date:
CREATE SEQUENCE id_seq;

INSERT INTO masterindex_table(user_id, name) SELECT nextval('id_seq'),
'Mr Foo' from masterindex_table where 12345 not in (SELECT user_id from
masterindex_table);

This will create a new record in masterindex_table only if the id 12345
is not already existing. All in one SQL command!

Heinz Hemken wrote:
> 
> The following is legal in MS SQL:
> 
> declare @user_id int
> select @user_id = user_id from masterindex_table where masterindexid = 1
> 
> whereupon the local variable can be used for other things. Is there
> anything similar in pgSQL? I want to have a user table for a web
> database, and I want to be able to do a begin/commit block where I 1)
> check to see if the user exists in an account table, 2) if not, get the
> next available userid from a master index table, 3) add a new userid to
> the account table for the new user, and 4) increment the userid field in
> the master index table. I want this to occur all within a single
> transaction block so that no race conditions exist, and the masterindex
> table is only being used by one process at a time for the whole
> operation.
> 
> How can I do this in postgresql? Is there a better approach?
> 
> --
> Heinz Hemken
> IFC Capital Corporation
> San Diego, C