используя переменную как часть выражения - PullRequest
0 голосов
/ 01 июня 2018

Я хочу использовать переменную как часть инструкции, но она говорит, что "tableref" не существует.

CREATE OR REPLACE FUNCTION ff(tipo_acta integer, hasta date)
  RETURNS void AS
$BODY$
DECLARE 
 tableref varchar;
 r record;
BEGIN
 if tipo_acta = 1 then
          tableref = 't1';
 elsif tipo_acta = 2 then tableref = 't2';
 else tableref = 't3';
end if;

for r select id from tableref where somedate >= hasta loop
--
end loop;

Я пытался использовать EXECUTE 'select id from ' || tableref || ' where....', но тоже не работает

Я думал сначала получить запись с помощью select id into r from t1 where .., а затем использовать ее в цикле, но, похоже, нет способа использовать запись в цикле следующим образом:

FOR r LOOP
....
END LOOP;

1 Ответ

0 голосов
/ 01 июня 2018

Для этого вам нужно использовать динамический sql.Вам нужно использовать команду execute , чтобы сделать это в PLPG / SQL.

В вашем коде это должно быть что-то вроде:

EXECUTE 'SELECT id FROM ' || tableref || ' WHERE somedate >= $1'
INTO c
USING hasta;
...