Maison >base de données >tutoriel mysql >Comment puis-je renvoyer plusieurs champs de différentes tables PostgreSQL sous la forme d'un seul enregistrement à l'aide de PL/pgSQL ?
Renvoi de plusieurs champs sous forme d'enregistrement dans PostgreSQL avec PL/pgSQL
Lorsque vous travaillez avec PL/pgSQL, vous pouvez rencontrer le besoin de renvoyer un enregistrement qui combine les champs de plusieurs tables. Ceci peut être réalisé en tirant parti du type de données RECORD de Postgres.
Utilisation de RECORD pour la récupération de champs multi-tables
Pour renvoyer les champs de différentes tables en tant que champs dans un seul enregistrement, définissez les champs souhaités dans un type RECORD comme suit :
CREATE OR REPLACE FUNCTION get_object_fields(name text) RETURNS RECORD AS $$ BEGIN -- Retrieve required fields from various tables based on input name -- Return fields as a RECORD RETURN RECORD(f1, f2, f3, f4, f5, f6, f7, f8); END $$ LANGUAGE PL/pgSQL;
Gestion de plusieurs résultats Lignes
Pour les scénarios complexes où les lignes avec plusieurs valeurs de champ doivent être « aplaties » en un seul enregistrement, une approche plus complexe est nécessaire. Considérons le code suivant :
CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int) RETURNS my_type AS $$ DECLARE result my_type; temp_result user; BEGIN -- Fetch two rows for illustration SELECT id, name INTO temp_result FROM user WHERE school_id = schoolid LIMIT 2; -- Assign values to the RECORD fields using pseudocode (adjust indices for actual row counts) result.user1_id := temp_result[0].id; result.user1_name := temp_result[0].name; result.user2_id := temp_result[1].id; result.user2_name := temp_result[1].name; RETURN result; END $$ LANGUAGE PL/pgSQL;
Avantages du type Record
Le type RECORD offre plusieurs avantages :
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!