Как вставить данные из хранимой процедуры в новую таблицу с помощью postgresql

#postgresql #stored-procedures

Вопрос:

Я создал хранимую процедуру с помощью PGADMIN4. Внутри SP я выбрал таблицу просмотра. Однако я хочу, чтобы данные внутри хранимой процедуры были вставлены в новую таблицу. Я пробовал приведенный ниже код, но он показывает ошибку:

Имя SP: Test

Новое имя таблицы: Customer

 Insert into public.Customer exec public.Test
 

Это мой код SP:

 create procedure test()
language plpgsql
as $
BEGIN
Select * from public.customer_list; 

END; 
$;
 

ОШИБКА: синтаксическая ошибка в «exec» или рядом с ним

Комментарии:

1. 1) Вам нужно будет добавить код вашей хранимой процедуры к вашему вопросу 2) Если вы на самом деле используете SP, которого у него нет RETURN , смотрите Здесь SP return 3) SP необходимо использовать с CALL

2. Преобразуйте вашу процедуру в функцию, которая возвращает таблицу. Процедуры не предназначены для возврата наборов результатов

3. @AdrianKlaver я добавил свой код sp

4. Вам понадобится функция, а не процедура. Для этого случая самый простой способ RETURN QUERY — см. Здесь Возврат 43.6.1.2. RETURN NEXT и RETURN QUERY и посмотрите на примеры. Затем что-то вроде Insert into public.Customer select * from public.test(); .

Ответ №1:

Процедуры не могут использоваться в SQL. Если у вас должна быть хранимая процедура (определяемая как код, хранящийся в базе данных для выполнения), перейдите к функции SQL. Который возвращает тип.

 create function copy_customer_list()
  returns setof customer_list 
  language sql
as $
   Select * from customer_list; 
$;  
 

Затем вы можете вставить в другую таблицу с

 insert into customer  
  select * from copy_customer_list();