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

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

Patricia Arquette
Patricia Arquetteoriginal
2025-01-03 10:55:40541parcourir

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

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

Lorsque vous travaillez avec PL/pgSQL, renvoi de plusieurs champs de plusieurs tables car un enregistrement peut être obtenu en utilisant le type de données RECORD. Cela permet la création d'un type de données composite pouvant contenir des champs avec différents types de données.

Exemple de code

Considérez l'exemple modifié suivant, qui répond à la complexité supplémentaire de récupérer des champs à partir de lignes distinctes dans une table :

CREATE TABLE user (id int, school_id int, name varchar(32));

CREATE TYPE my_type AS (
  user1_id   int,
  user1_name varchar(32),
  user2_id   int,
  user2_name varchar(32)
);

CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int)
  RETURNS my_type AS $$
DECLARE
  result my_type;
  temp_result user;
BEGIN
  SELECT id, name INTO temp_result FROM user WHERE school_id = schoolid ORDER BY id ASC LIMIT 2;
  
  result.user1_id := temp_result[1].id;
  result.user1_name := temp_result[1].name;
  
  IF temp_result[2].id IS NOT NULL THEN
    result.user2_id := temp_result[2].id;
    result.user2_name := temp_result[2].name;
  END IF;
  
  RETURN result;
END
$$ language plpgsql;

Dans cet exemple, la fonction get_two_users_from_school renvoie un enregistrement my_type avec quatre champs : user1_id, user1_name, user2_id et user2_name. Il récupère et organise les données de la table utilisateur, en aplatissant les lignes en un seul enregistrement cohérent.

Structure d'enregistrement dynamique

Notez que l'enregistrement renvoyé n'est pas strictement limité à un nombre spécifique de champs. Vous pouvez renvoyer un nombre arbitraire de champs en fonction des données récupérées de la base de données.

Utilisation

Pour utiliser la fonction, vous pouvez exécuter la requête suivante :

SELECT * FROM get_two_users_from_school(123);

Cela renverra un enregistrement avec les détails de l'utilisateur à partir de l'identifiant de l'école spécifié.

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