SELECT.. INTO для создания таблицы в PL/pgSQL

Я хочу использовать SELECT INTOдля создания временной таблицы в одной из моих функций. SELECT INTOработает в SQL, но не в PL/pgSQL.

Этот оператор создает таблицу с именем mytable (. Если orig_tableсуществует как отношение):

SELECT *
INTO TEMP TABLE mytable
FROM orig_table;

Но поместите эту функцию в PostgreSQL, и вы получите ошибку:ERROR: "temp" is not a known variable

CREATE OR REPLACE FUNCTION whatever()
RETURNS void AS $$
BEGIN
    SELECT *
    INTO TEMP TABLE mytable
    FROM orig_table;
END; $$ LANGUAGE plpgsql;

Я могу SELECT INTOпеременную типа recordв PL/pgSQL, но тогда мне нужно определить структуру при получении данных из этой записи. SELECT INTOдействительно просто -автоматически создает таблицу той же структуры, что и запрос SELECT. Есть ли у кого-нибудь объяснение, почему это не работает внутри функции?

Кажется, что SELECT INTOработает по-другому в PL/pgSQL, потому что вы можете выбирать переменные, которые вы объявили. Однако я не хочу объявлять свою временную структуру таблицы. Я бы хотел, чтобы структура создавалась автоматически, как это делается в SQL.

29
задан das-g 8 March 2017 в 12:37
поделиться