首页 > 解决方案 > 如何在我的 SELECT 语句中使用 postgres 变量?

问题描述

我将一个值存储在一个变量中featureId,然后尝试在我的 SELECT 语句中使用该值,但 postgres 似乎是按字面意思使用该名称并寻找一个名为“featureid”的列。我收到错误“错误:列“featureid”不存在第 4 行:featureId,”

我的代码如下。如何在 SELECT 语句中使用变量的值?

SELECT id INTO featureId FROM tableA WHERE NAME = 'some value';

INSERT INTO tableB (client_id, feature_id, does_have)
  SELECT
  id,
  featureId,
  TRUE
FROM tableA

标签: sqlpostgresqlselect

解决方案


如果没有声明的变量,您SELECT INTO就是SELECT INTO创建表的版本。要亲自查看,请尝试:

SELECT id
       INTO featureid
       FROM tablea
       WHERE name = 'some value';

SELECT *
       FROM featureid;

为了将值分配给变量,必须声明变量。您可以使用匿名DO块。

DO
$$
DECLARE
  featureid tablea.id%TYPE;
BEGIN
  SELECT id
         INTO featureid
         FROM tablea
         WHERE name = 'some value';

  INSERT INTO tableb
              (client_id,
               feature_id,
               does_have)
              SELECT id,
                     featureid,
                     true
                     FROM tablea;
END;
$$
LANGUAGE plpgsql;

推荐阅读