Ошибка SQL [42P01]: ОШИБКА: отношение «имя_таблицы» не существует - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь создать временную таблицу в моей хранимой функции в 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 голосов
/ 16 января 2019

У вас есть несколько проблем с вашим кодом

  1. Вы определили функцию как stable, что согласно документации не разрешено, и вы получитеошибка при выполнении.

    ОШИБКА: CREATE TABLE не допускается в энергонезависимой функции

Чтобы исправить это, необходимо изменить его наVOLATILE

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$

Демо

...