SQL错误[42P01]:错误:关系“ temp_table_name”不存在

时间:2019-01-16 07:17:07

标签: postgresql plpgsql

我正在尝试在Postgresql的存储函数中创建一个临时表。我使用的语言是“ plpgsql”。 当我运行存储的函数时,它会抛出一个SQL Error [42P01].

完全错误

  

:“查询执行失败。                  原因:
                 SQL错误[42P01]:错误:关系“ temp_table”确实存在。
                 不存在”

CREATE OR REPLACE FUNCTION public.sp_str_dsl_lp_ung(x int8)
RETURNS integer
LANGUAGE plpgsql volatile
AS $function$
declare 

--variables
variab int :=0;
begin  

    CREATE temporary TABLE temp_table  (a int8, b int8) ;
    insert into temp_table (a,b) select (a,b) from existing_table;
end
$function$

我想创建一个临时表来临时存储一些记录。

1 个答案:

答案 0 :(得分:0)

您的代码问题很少

  1. 您已将函数定义为stable,根据 禁止使用documentation,执行时会收到错误消息。

      

    错误:非易失性函数中不允许创建表

要解决此问题,必须将其更改为VOLATILE

  1. insert into temp_table (a,b) select (a,b)不起作用,因为 括号内的列表示您将它们视为 record,而不是单个列。

修复这两个问题,您的功能应该可以正常工作。

CREATE OR REPLACE FUNCTION sp_str_dsl_lp_ung(color smallint,
lpcount integer, update_userid character varying, OUT lp integer)
RETURNS integer
LANGUAGE plpgsql volatile
AS $function$
declare 

--variables
variab int :=0;
begin  

    CREATE temporary TABLE temp_table  (a int8, b int8) ;
    insert into temp_table (a,b) select a,b from existing_table;
end
$function$

Demo