如何在plpgsql PROCEDURE中使用SELECT INTO?

时间:2016-10-12 17:21:56

标签: postgresql

我正在尝试在plpgsql过程中使用SELECT INTO

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 个答案:

答案 0 :(得分:3)

不鼓励使用select into根据select语句创建表。

建议使用(标准兼容)create table as

select into explicitly mentions PL/pgSQL as one of the reasons的文档:

  

CREATE TABLE AS在功能上与SELECT INTO相似。 CREATE TABLE AS是推荐的语法,因为这种形式的SELECT INTO在ECPG或PL / pgSQL中不可用,因为它们以不同的方式解释INTO子句

所以你的功能应该是:

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;