首页 > 解决方案 > 如何将变量传递给 PostgreSQL (BEGIN; DO; COMMIT;) 查询?

问题描述

我使用 Javascript 和 Postgresql。我想做交易:


const user = await getCurrentUser()

await db.query(sql`
    BEGIN;
    DO
    $$
      DECLARE
        round int;
      BEGIN

        SELECT id
        INTO round
        FROM "game_round"
        WHERE status = 'pending';

        IF NOT FOUND
        THEN
          RAISE EXCEPTION 'No pending round found';
        ELSE

          INSERT INTO "game_round_bet"
            (game_round_id, user_id, money)
          VALUES
            (round, ${user.id}, 300);
        END IF;
      END;
    $$;
    COMMIT;
`)

但是,如果我将${user.id}javascript 变量传递给 sql 字符串,则会出现错误:

“无法在准备好的语句中插入多个命令”

如何将变量从 Javascript 世界传递到 SQL 世界?

标签: postgresqltransactionsplpgsql

解决方案


推荐阅读