Postgresql plpgsql返回一行或另一行
我想在函数中以两种不同的方式查找数据,并在找到结果后立即返回 首先,我想运行一个查询,如Postgresql plpgsql返回一行或另一行,postgresql,plpgsql,Postgresql,Plpgsql,我想在函数中以两种不同的方式查找数据,并在找到结果后立即返回 首先,我想运行一个查询,如 从company.id=x的公司中选择* 然后,如果没有返回结果,请尝试这样的查询 select company.* from company join company_alias on company.id = company_alias.company_id where company_alias.company_alias_id = x; 目前,我正在使用一个un
从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;
这似乎效率不高,因为我总是运行两个查询。但我不知道如何在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;
你最后一次尝试差点被击中。您需要一个plpgsql(非sql)函数,并应检查特殊变量:
您想要返回
*
还是只想返回公司名称/id
?@JuanCarlosOropeza:这是Oracle PL/SQL手册-与Postgres的PL/pgSQL无关
create or replace function payment_claim_payer(x int)
returns company language plpgsql as $$
declare found_company company;
begin
select *
from company
where company.id = x
into found_company;
if not found 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;
$$;