临时表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;