Я хочу искать данные по-разному в функции и возвращать, как только я нахожу результат.plpgsql возвращает одну строку или другую
Сначала я хочу запустить запрос типа;
select * from company where company.id = x
Тогда, если это не возвращает результатов, попробуйте запрос, как этот
select company.*
from
company
join
company_alias on company.id = company_alias.company_id
where
company_alias.company_alias_id = x;
На данный момент я делаю это с union all
create or replace function get_payer(x int) returns company as $$
select * from company where company.id = x
union all
select company.*
from
company
join
company_alias on company.id = company_alias.company_id
where
company_alias.company_alias_id = x;
$$ language sql stable
set search_path from current;
Это Безразлично» t кажется эффективным, так как я всегда выполняю два запроса. Но я не уверен, как структурировать условие в функции plpgsql, чтобы справиться с этим.
Я пробовал вариации следующих без везения
create or replace function payment_claim_payer(x int) returns company as $$
declare found_company company;
begin
select * from company where company.id = x into found_company;
if not exists found_company then
select
company.*
from
company
join
company_alias on company.id = company_alias.company_id
where
company_alias.company_alias_id = x into found_company;
end if;
return found_company;
end;
$$ language plpgsql stable
set search_path from current;
вы хотите возвращение '*' или просто 'company_name/id'? –
@JuanCarlosOropeza: это руководство Oracle PL/SQL - это не имеет никакого отношения к Postgres PL/pgSQL –