Как я могу использовать переменную postgres в моем операторе SELECT? - PullRequest
0 голосов
/ 17 мая 2019

Я сохраняю значение в переменной 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

Ответы [ 2 ]

1 голос
/ 18 мая 2019

Без объявленной переменной ваш 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;
0 голосов
/ 18 мая 2019

Есть несколько ошибок в том, что вы пытаетесь сделать:

  • sql - это декларативный язык, поэтому вы спрашиваете, что делать, а не как делать, и этопо этой причине вы не можете хранить переменные, и некоторые операторы, такие как объявления и начало-конец, должны использоваться в триггере, а не в простом запросе.
  • вы выполняете два оператора: выберите и вставьте в , и они будут выполнены один за другим, поэтому вы снова не сможете сохранить переменную.
  • вставьте, вставьте одну запись, но, возможно, вы пытаетесь получить больше данных с помощьюоператор выбора (если NAME не является уникальным)

, если 'some-value' является известной константой, а NAME является уникальным, просто вставьте это значение в предложение where вставки в.Если вы пытаетесь вставить больше данных, взгляните на массовая вставка синтаксис postgres: массовая вставка

...