临时表postgresql函数

临时表postgresql函数,sql,postgresql,pgadmin,Sql,Postgresql,Pgadmin,我找不到关于创建(和使用)表的语法的清晰解释,这些表仅用于函数的内部计算。谁能给我一个语法示例吗 根据我的发现,我已经尝试过这个方法(在临时表之前使用和不使用@): 我得到: 错误:“DECLARE”处或附近出现语法错误 第5行:声明@temp_表 - 我还尝试了建议的创建表方法,方法如下: CREATE FUNCTION test.myfunction() RETURNS SETOF test.out_table AS $$ CREATE TABLE temp_table AS

我找不到关于创建(和使用)表的语法的清晰解释,这些表仅用于函数的内部计算。谁能给我一个语法示例吗

根据我的发现,我已经尝试过这个方法(在
临时表
之前使用和不使用
@
):

我得到:

错误:“DECLARE”处或附近出现语法错误 第5行:声明@temp_表

-

我还尝试了建议的创建表方法,方法如下:

CREATE FUNCTION test.myfunction()
RETURNS SETOF test.out_table
AS $$

    CREATE TABLE temp_table AS
        SELECT id, value
        FROM test.another_table;

    INSERT INTO test.out_table
        SELECT id, value
        FROM temp_table;

$$ LANGUAGE SQL;
我明白了:

错误:关系“临时表”不存在 第11行:来自临时表格


(显然,我知道我在上面的代码中所做的工作不需要临时表,但这不是重点:)=>我想了解语法以使其工作)

创建临时表的适当语法是

create temp table...
但是您必须确保在退出函数之前删除临时表。另外,我建议使用以下语法:

CREATE TEMP TABLE IF NOT EXISTS temp_table AS
    SELECT id, value
    FROM test.another_table;
因此,您的功能如下:

CREATE FUNCTION test.myfunction()
RETURNS SETOF test.out_table
AS $$

    CREATE TEMP TABLE IF NOT EXISTS temp_table AS
        SELECT id, value
        FROM test.another_table;

    INSERT INTO test.out_table
        SELECT id, value
        FROM temp_table;

DROP TABLE temp_table;

$$ LANGUAGE SQL;
但如果我能这么做,我想重写这个函数,使它更正确:

CREATE FUNCTION test.myfunction()
RETURNS TABLE (id int, value varchar) -- change your datatype as needed
AS $$
BEGIN;
CREATE TEMP TABLE IF NOT EXISTS temp_table AS
    SELECT id, value
    FROM test.another_table;

INSERT INTO test.out_table
    SELECT id, value
    FROM temp_table;

DROP TABLE temp_table;

RETURN QUERY 
SELECT id, value
from temp_table;

END;
$$ LANGUAGE plpgsql;

未经测试;如果失败,请告诉我。

Postgres为此使用临时表。表变量是SQL Server的一项功能。您在手册的什么地方找到了语法
DECLARE@temp_Table Table…
?我明天会在工作中测试它,并会让您知道(如果它有效,我会接受它),同时,我只想感谢您抽出时间:)我因为
CREATE
语句而出现语法错误。更准确地说,我得到了以下信息:
错误:在“create”处或附近出现语法错误
/
第4行:创建临时表TEMP_mag_ref_compl AS
/
/
*********************Erreur*********
/
错误:在“create”处或附近出现语法错误
/
语句:42601,你是对的。我将其更改为添加“开始”和“结束”,这应该可以防止语法错误。@通配符如果保持事务打开,临时表可以保持,抛出“表已存在”错误。@dizzystar您似乎正在删除临时表,然后选择它作为返回查询。。。这是对的,它不存在吗?
CREATE FUNCTION test.myfunction()
RETURNS TABLE (id int, value varchar) -- change your datatype as needed
AS $$
BEGIN;
CREATE TEMP TABLE IF NOT EXISTS temp_table AS
    SELECT id, value
    FROM test.another_table;

INSERT INTO test.out_table
    SELECT id, value
    FROM temp_table;

DROP TABLE temp_table;

RETURN QUERY 
SELECT id, value
from temp_table;

END;
$$ LANGUAGE plpgsql;