BEGIN
_table_name := 'mytable';
CREATE TEMPORARY TABLE _table_name (
id integer NOT NULL,
name character varying,
active boolean
) ON COMMIT DROP';
-- logic here
RETURN QUERY SELECT table1.id, table1.name FROM _table_name AS table1;
END;
Я упростил свою проблему. Я пытаюсь использовать переменную в качестве имени таблицы.Как использовать переменную как имя таблицы?
Я знаю, что вы можете делать такие вещи, как SELECT * FROM table1 WHERE id = _id
, где _id
является объявленной varaible.
Я знаю, что могу это сделать EXECUTE
, но тогда у меня есть запрос вроде: INSERT INTO table2 (id) SELECT id FROM unnest(_ids) as id
где _ids - это массив.
В любом случае, чтобы решить проблему 1 с использованием переменной в качестве имени таблицы? и проблема 2, используя unnest
внутри EXECUTE
?
Таким образом, проблема заключается в том, что запросы принимают _table_name
как имя таблицы литералов, но не похоже, что вместо этого используется «mytable» в качестве имени таблицы.
http://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN –
@a_horse_with_no_name я уже прочитал, что. Мой аргумент заключался в том, что, как вы можете использовать переменные в литералах, как в примере с '_id' против примера create table. – user962449