Bonjour à tous,
J'ai un type complexe, et une série de fonction qui s'exécutent les unes après les autres en passant ce tableau et en renvoyant ce tableau après l'avoir filtré selon une règle métier. Cela me fait une espèce de "workflow". Désormais, j'aimerais stocker les étapes dans une table à part et exécuter ce workflow à partir de celle-ci.
Le but étant de pouvoir paramétrer les étapes. Voici à quoi ça ressemble sans dynamisme :
Et le workflow se retrouverait suite à une requête du style select f_name from workflow order by pos, reste plus qu'à exécuter les différents f_name renvoyés, qui ont toutes la même signature : arg_from DATE, arg_to DATE, arg_subprograms TEXT[], arg_base SE_RESULT[] DEFAULT NULL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CREATE FUNCTION se_test(arg_from DATE, arg_to DATE, arg_subprograms TEXT[]) RETURNS SETOF SE_RESULT AS $$ DECLARE prev_result SE_RESULT[]; BEGIN prev_result := ARRAY(SELECT ROW(pp_id, se_id, presencestatus) FROM se_1(arg_from, arg_to, arg_subprograms)); prev_result := ARRAY(SELECT ROW(pp_id, se_id, presencestatus) FROM se_2(arg_from, arg_to, arg_subprograms, prev_result)); prev_result := ARRAY(SELECT ROW(pp_id, se_id, presencestatus) FROM se_3(arg_from, arg_to, arg_subprograms, prev_result)); prev_result := ARRAY(SELECT ROW(pp_id, se_id, presencestatus) FROM se_4(arg_from, arg_to, arg_subprograms, prev_result)); RETURN QUERY SELECT * FROM UNNEST(prev_result); END; $$ LANGUAGE 'plpgsql';
J'ai déjà fait du SQL Dynamique avec EXECUTE 'SELECT truc FROM ' || arg_ma_table || ' WHERE col = ' || arg_x des trucs comme ça mais là il s'agit de passer des tableaux (arg_subprograms et prev_result) qui peuvent contenir beaucoup de données.
Alors je pense que ce n'est pas adapté de faire comme ça, mais je vous pose la question par acquit de conscience. Auquel cas auriez-vous une astuce pour se faire ?
Merci à vous,
A bientôt
Partager