#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 необходимо использовать с CALL2. Преобразуйте вашу процедуру в функцию, которая возвращает таблицу. Процедуры не предназначены для возврата наборов результатов
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();