如何在 PostgreSQL 事务中使用变量

How to use variables in PostgreSQL transaction

如何在Postgresql里面的一个事务中取值到一个变量中,如果SELECT没有return任何东西,抛出错误,如果SELECTreturn编辑数据,然后在交易中使用它们?

像这样:

BEGIN;

@activeRounds = SELECT * FROM "rounds" WHERE status = 'active';

if(!@activeRounds) {
  RAISE ERROR "Has no Active rounds"
};

INSERT INTO "bet"
  (user_id, round_id)
VALUES
  (100, @activeRound[0].id)


COMMIT;

如何在事务中的一个请求中做类似的事情?

写一个DO statement in PL/pgSQL.

与每个 SQL 语句一样,DO 在单个事务中运行。 PL/pgSQL 是一种具有变量和条件处理的过程语言。

您可以根据您的 table 结构调整以下代码:

begin;
do
$$
declare
 v int;
begin
 select c1 into v from t1 where  k1=1;
 if not found 
 then
  raise exception 'no row found';
 else
  insert into t2(c2) values(v);
 end if;
end;
$$;
commit;

注意 begin; 开始交易和 begin 开始 pl/pgSQL 区块之间的区别。