Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

427
Visualizações
Error al crear una función en Postgres

Estoy tratando de crear una función de postgres que solo devuelva los amigos que un usuario tiene en la base de datos. Solo debe devolver el nombre y apellido de todos los amigos del usuario. Sin embargo, sigo recibiendo este error:

[42601] ERROR: query has no destination for result data

No tiene sentido para mí porque estoy devolviendo una tabla con todos los nombres y apellidos.

Aquí está mi función. ¿Alguien sabe por qué sería así? No pude encontrar la respuesta en ningún otro lado.

 create or replace function getFriends(pEmail text) returns TABLE(pkUser int, FirstName text, LastName text) language plpgsql as $$ declare pk int; begin select "pkUser" into pk from users where "Email"=pEmail; select "pkUser", "FirstName", "LastName" from users u inner join friends f on u."pkUser" = f."User2ID" where f."User1ID"=pk; select "pkUser", "FirstName", u."LastName" from users u inner join friends f on u."pkUser" = (f."User1ID") where f."User2ID"=pk; end $$;
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Su consulta final no "consume" su resultado. en PL/pgSQL, el resultado de una consulta debe almacenarse en una variable (como lo hizo en su primera consulta) o descartarse usando perform o devolverse desde la función. Para hacer eso, use RETURN QUERY .

Puede combinar ambas consultas usando UNION ALL

 create or replace function getFriends(pEmail text) returns TABLE(pkUser int, FirstName text, LastName text) language plpgsql as $$ declare pk int; begin select "pkUser" into pk from users where "Email"=pEmail; return query select "pkUser", "FirstName", "LastName" from users u inner join friends f on u."pkUser" = f."User2ID" where f."User1ID"=pk union all select "pkUser", "FirstName", u."LastName" from users u inner join friends f on u."pkUser" = (f."User1ID") where f."User2ID"=pk; end $$;

Sin embargo, puede simplificar toda la función a una sola consulta y usar language sql en su lugar. La return query no es necesaria entonces.

 create or replace function getFriends(pEmail text) returns TABLE(pkUser int, FirstName text, LastName text) language sql as $$ select "pkUser", "FirstName", "LastName" from users u inner join friends f on u."pkUser" = f."User2ID" where f."User1ID" in (select "pkUser" from users where "Email" = pEmail) union all select "pkUser", "FirstName", u."LastName" from users u inner join friends f on u."pkUser" = f."User1ID" where f."User2ID" in (select "pkUser" from users where "Email" = pEmail); $$;
over 4 years ago · Santiago Trujillo Relatório

0

Su función plpgsql debe return query para que sea válida.

Pero aquí creo que puedes hacer lo que quieras con una consulta directa, así que simplemente cambia a sql y:

 create or replace function getFriends(pEmail text) returns table(pkUser int, FirstName text, LastName text) language sql as $$ select u2."pkUser", u2."FirstName", u2."LastName" from users u1 inner join friends f on u1."pkUser" in (f."User1ID", f."User2ID") inner join users u2 on u2."pkUser" in (f."User1ID", f."User2ID") and u2."pkUser" <> u1."pkUser" where u1."Email" = pEmail; $$

Esto selecciona el registro del usuario cuyo correo electrónico se proporciona como argumento para la función, luego busca todos los amigos correspondientes (ya sea en User1ID o User2ID ) y finalmente devuelve el registro de usuario amigo.

over 4 years ago · Santiago Trujillo Relatório

0

Use SELECT ... INTO ... para almacenar los resultados de la consulta

O

abrir un cursor

O

use PERFORM ... en el caso improbable de que no le importe el conjunto de resultados.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda