Je suis en train d'écrire un SP, en utilisant PL/pgSQL.
Je veux renvoyer un enregistrement, composé de champs provenant de plusieurs tables différentes. Cela pourrait ressembler à quelque chose comme ceci :
CREATE OR REPLACE FUNCTION get_object_fields(name text)
RETURNS RECORD AS $$
BEGIN
-- fetch fields f1, f2 and f3 from table t1
-- fetch fields f4, f5 from table t2
-- fetch fields f6, f7 and f8 from table t3
-- return fields f1 ... f8 as a record
END
$$ language plpgsql;
Comment puis-je retourner les champs de différentes tables comme champs d'un seul enregistrement ?
[Edit]
Je me suis rendu compte que l'exemple que j'ai donné ci-dessus était légèrement trop simpliste. Certains des champs que je dois récupérer seront enregistrés sous forme de lignes distinctes dans la table de base de données interrogée, mais je veux les renvoyer dans la structure d'enregistrement "aplatie".
Le code ci-dessous devrait aider à illustrer davantage :
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
-- for purpose of this question assume 2 rows returned
SELECT id, name INTO temp_result FROM user where school_id = schoolid LIMIT 2;
-- Will the (pseudo)code below work?:
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 plpgsql
0 votes
A-t-il enquêté sur le retour de plusieurs enregistrements, par exemple
returns setof my_type
0 votes
@nate : ce n'est pas la fonction qui renvoie un ensemble. J'ai besoin de récupérer les enregistrements DANS le SP, puis de récupérer les champs des enregistrements INDIVIDUELS dans l'ensemble récupéré, dans les données renvoyées par la fonction - cela semble plus compliqué que cela ne l'est en réalité - voir le code ci-dessus.