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 ?
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!