Maison > base de données > tutoriel mysql > Comment récupérer et combiner des champs d'enregistrement de plusieurs tables PostgreSQL à l'aide de PL/pgSQL ?

Comment récupérer et combiner des champs d'enregistrement de plusieurs tables PostgreSQL à l'aide de PL/pgSQL ?

Patricia Arquette
Libérer: 2025-01-04 13:56:40
original
194 Les gens l'ont consulté

How to Retrieve and Combine Record Fields from Multiple PostgreSQL Tables using PL/pgSQL?

Récupération de champs d'enregistrement de plusieurs tables dans PostgreSQL avec PL/pgSQL

Le retour de plusieurs champs de différentes tables sous la forme d'un seul enregistrement dans PL/pgSQL nécessite la construction d'un enregistrement personnalisé avec la composition de champ souhaitée. Voici comment y parvenir :

Création d'un type de données d'enregistrement

Définissez un type d'enregistrement à l'aide de l'instruction CREATE TYPE pour spécifier les champs et leurs types de données :

CREATE TYPE my_record_type AS (
  field1 text,
  field2 integer,
  field3 boolean
);
Copier après la connexion

Implémentation de la fonction

Dans le SP, utilisez l'instruction DECLARE pour déclarer une variable du type enregistrement et remplir son field :

DECLARE
  result my_record_type;
BEGIN
  SELECT field1, field2, field3 INTO result FROM table1;
  -- Retrieve and populate additional fields from other tables
  RETURN result;
END
Copier après la connexion

Gestion des résultats multi-lignes

Pour récupérer plusieurs lignes d'une table et les regrouper en un seul enregistrement, envisagez d'utiliser une sous-requête. Par exemple, pour récupérer et aplatir les lignes de la table utilisateur :

DECLARE
  result my_record_type;
BEGIN
  SELECT id, name FROM (
    SELECT id, name
    FROM user
    WHERE school_id = InputSchoolId
    LIMIT 2
  ) AS subquery
  INTO result;
RETURN result;
END
Copier après la connexion

Utilisation du type de retour d'enregistrement

Après avoir défini la fonction, appelez-la pour récupérer l'enregistrement :

SELECT get_object_fields('name') AS record_output;
Copier après la connexion

Le résultat sera un enregistrement contenant les champs des tables spécifiées.

Remarque

Pendant que l'utilisation de CREATE TYPE pour des résultats polymorphes est déconseillée, vous pouvez exploiter le type RECORD pour plus de flexibilité. Par exemple :

CREATE FUNCTION test_ret(a text, b text) RETURNS RECORD AS $$
DECLARE 
  result RECORD;
BEGIN
  IF LENGTH(a) < LENGTH(b) THEN
    result = (TRUE, (a || b)::text, 'a shorter than b'::text);
  ELSE
    result = (FALSE, (b || a)::text, NULL::text);
  END IF;
RETURN result;
END;$$ LANGUAGE plpgsql;
Copier après la connexion

Cela permet de renvoyer des enregistrements avec un nombre variable de colonnes.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal