Maison >base de données >tutoriel mysql >Comment renvoyer plusieurs champs sous la forme d'un seul enregistrement dans PostgreSQL à l'aide de PL/pgSQL ?

Comment renvoyer plusieurs champs sous la forme d'un seul enregistrement dans PostgreSQL à l'aide de PL/pgSQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-04 05:54:37691parcourir

How to Return Multiple Fields as a Single Record in PostgreSQL using PL/pgSQL?

Renvoi de plusieurs champs sous forme d'enregistrement dans PostgreSQL avec PL/pgSQL

Dans PL/pgSQL, création d'une fonction qui renvoie plusieurs champs de différents Les tables en tant qu'enregistrement unique peuvent être obtenues via le type RECORD. Voici comment procéder :

Type RECORD

Déclarez un type RECORD qui définit les champs que vous souhaitez renvoyer. Par exemple :

CREATE TYPE person AS (
  name text,
  age integer,
  city text
);

Interrogation de différentes tables

Dans votre fonction PL/pgSQL, utilisez des requêtes pour récupérer les champs de différentes tables. Par exemple, si vous avez des tables d'utilisateurs, d'adresses et de villes, vous pouvez écrire :

SELECT u.name, u.age, a.city
FROM users AS u
JOIN addresses AS a ON u.address_id = a.id
WHERE u.user_id = @user_id;

Stockage des résultats de requête

Stocker les résultats de la requête dans une variable d'enregistrement . Le type RECORD permet d'accéder aux champs par nom de colonne :

DECLARE result person;
SELECT u.name, u.age, a.city INTO result;

Renvoyer l'enregistrement

Enfin, renvoyer l'enregistrement résultat :

RETURN result;

Gestion des résultats irréguliers

Si vous pouvez récupérer un numéro incohérent de lignes de différentes tables, utilisez la fonction coalesce() pour fournir des valeurs de secours :

SELECT
  coalesce(u.name, 'Unknown'),
  coalesce(u.age, 0),
  coalesce(a.city, 'N/A')
INTO result;

Exemple avec sous-requête

Si les données que vous devez renvoyer sont stockées sous forme de lignes séparées dans une seule table, utilisez une sous-requête :

CREATE FUNCTION get_two_users_from_school(schoolid int)
  RETURNS my_type AS $$
DECLARE
  result my_type;
BEGIN
  -- Select first two users from school
  SELECT id, name
  FROM user
  WHERE school_id = schoolid
  ORDER BY id
  LIMIT 2
  INTO result;
RETURN result;
END
$$ language plpgsql;

Cette approche vous permet d'"aplatir" les lignes en un structure d'enregistrement unique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn