J'essaie d'implémenter une logique métier dans une fonction PL/pgSQL.Comment écrire cette fonction en tant que fonction pL/pgSQl?
J'ai piraté un code pseudo qui explique le type de logique métier que je veux inclure dans la fonction.
Note: Cette fonction retourne une table, donc je peux l'utiliser dans une requête comme:
SELECT A.col1, B.col1 DE (SELECT * de some_table_returning_func (1, 1, 2, 3) A), tbl2 comme B;
Le pseudo-code de la pl/pgSQL est ci-dessous:
CREATE FUNCTION some_table_returning_func(uid int, type_id int, filter_type_id int, filter_id int) RETURNS TABLE AS $$
DECLARE
where_clause text := 'tbl1.id = ' + uid;
ret TABLE;
BEGIN
switch (filter_type_id)
{
case 1:
switch (filter_id)
{
case 1:
where_clause += ' AND tbl1.item_id = tbl2.id AND tbl2.type_id = filter_id';
break;
//other cases follow ...
}
break;
//other cases follow ...
}
// where clause has been built, now run query based on the type
ret = SELECT [COL1, ... COLN] WHERE where_clause;
IF (type_id <> 1) THEN
return ret;
ELSE
return select * from another_table_returning_func(ret,123);
ENDIF;
END;
$$ LANGUAGE plpgsql;
J'ai les questions suivantes:
Comment puis-je écrire la fonction correctement (éxécute la requête avec la clause WHERE générée, et pour retourner une table
Comment puis-je écrire une fonction PL/pgSQL qui accepte une table et un entier et retourne une table (another_table_re turning_func)?