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 :
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 );
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
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
Après avoir défini la fonction, appelez-la pour récupérer l'enregistrement :
SELECT get_object_fields('name') AS record_output;
Le résultat sera un enregistrement contenant les champs des tables spécifiées.
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;
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!