Я новичок в работе с PL / pgSQL и пытаюсь создать функцию, которая либо найдет идентификатор существующей строки, либо вставит новую строку, если она не найдена, и выдаст новуюЯ БЫ.
Запрос, содержащийся в функции ниже, прекрасно работает сам по себе, и функция создается прекрасно.Однако, когда я пытаюсь запустить его, я получаю сообщение об ошибке «ОШИБКА: ссылка на столбец« id »является неоднозначной».Кто-нибудь может определить мою проблему или предложить более подходящий способ сделать это?
create or replace function sp_get_insert_company(
in company_name varchar(100)
)
returns table (id int)
as $$
begin
with s as (
select
id
from
companies
where name = company_name
),
i as (
insert into companies (name)
select company_name
where not exists (select 1 from s)
returning id
)
select id
from i
union all
select id
from s;
end;
$$ language plpgsql;
Вот как я вызываю функцию:
select sp_get_insert_company('TEST')
И это ошибка, которую я получаю:
Ошибка SQL [42702]: ОШИБКА: ссылка на столбец "id" является неоднозначной
Подробно: может относиться либо к переменной PL / pgSQL, либо к столбцу таблицы.
Где:Функция PL / pgSQL sp_get_insert_company (с изменением символов) строка 3 в операторе SQL