2016-10-12 2 views
0

Я пытаюсь использовать SELECT INTO в процедуре plpgsql.Как использовать SELECT INTO в PLpgsql ПРОЦЕДУРА?

CREATE OR REPLACE FUNCTION reset_data() 
RETURNS void AS $$ 
BEGIN 
DROP TABLE IF EXISTS experiment; 
SELECT * INTO experiment FROM original; 
END; 
$$ LANGUAGE plpgsql; 

Это приводит к ошибке:

ERROR: "experiment" is not a known variable 
LINE 5: SELECT * INTO experiment FROM original; 
        ^

********** Error ********** 

ERROR: "experiment" is not a known variable 
SQL state: 42601 
Character: 113 

По-видимому, мы не можем использовать SELECT INTO, как это. Как мы делаем это?

ответ

1

Не рекомендуется использовать select into для создания таблицы на основе оператора select.

Рекомендуется использовать (стандартно совместимый) create table as.

Документация select intoexplicitly mentions PL/pgSQL as one of the reasons:

CREATE TABLE AS is functionally similar to SELECT INTO . CREATE TABLE AS is the recommended syntax, since this form of SELECT INTO is not available in ECPG or PL/pgSQL, because they interpret the INTO clause differently

Так что ваша функция должна быть:

CREATE OR REPLACE FUNCTION reset_data() 
RETURNS void AS $$ 
BEGIN 
    DROP TABLE IF EXISTS experiment; 
    create table experiment 
    as 
    SELECT * FROM original; 
END; 
$$ LANGUAGE plpgsql;