我正在尝试在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。我们怎么做?
答案 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;