Eu escrevo uma função SQL que recebe e retorna um registro. Eu preciso usar o registro recebido em uma cláusula from. estou usando unnest(array[the_variable])
.
Existe uma função ou estrutura específica para fazer isso? (algo como record_to_recordset(the_variable)
)
Aqui está o meu exemplo:
create type calculate_info_type as (super_code text, super_name text);
create function calculate_info(p_country country)
returns calculate_info_type
language SQL as
$SQL$
SELECT super_code, super_name
FROM unnest(array[p_country]), -- <=== HERE!!
lateral (select
prefix is not null as has_prefix
) g1,valores que tenga la tabla
lateral (select
case has_prefix when true then iso||'-'||prefix else iso end as super_code,
case has_prefix when true then name else name||' without phone prefix' end as super_name
) g2
$SQL$;
Coloquei um exemplo completo de execução aqui: https://rextester.com/XIRSW33377
Resposta curta (editada)
Você pode escrever
FROM (select p_country.*) some_alias
em vez deFROM unnest(array[p_country])
Código da pergunta com correções mínimas: https://rextester.com/UGKJR74935
Resposta original (com muitas sugestões úteis)
Parece que você quer algo assim:
Mas você realmente não precisa do
from
:concat_ws
retornará apenas o valor doiso
campo seprefix
for nulo.Você não precisa de um
lateral
para usar essa função:Seu exemplo atualizado: https://rextester.com/GVLK52206