Traduire une UDF récursive
Bonjour,
J'ai une fonction utilisateur récursive (plus de 300 lignes) écrite en PL/SQL que je devrais l'implémenter en T-SQL. Cette fonction accède à plusieurs tables volumineuses pour effectuer les calculs nécessaires ; le problème de performances se pose donc. Dans ma table initiale, je dispose de plus de 4 millions de triplets (A, B, C) distincts. Je ne pourrai donc mettre en place cette UDF en T-SQL et l'appeler 4 millions fois ! Je souhaite donc découper les traitements dans des tables temporaires étant donné que la fonction comprend une multitude de branchements conditionnels. Dans les deux blocs principaux, il y a un branchement qui fait un appel récursif avec des valeurs différentes pour les paramètres 3 à 8.
Auriez-vous une idée sur la manière d'implémenter la partie récursive de la fonction utilisateur ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
| CREATE OR REPLACE FUNCTION XXX_USER.F_MONTANT (A, B, C, 'N', 'N', 'N', 'N', 'N')
RETURN NUMBER IS
BEGIN
IF -- Bloc 1
...
RETURN(F_MONTANT(A, B, C-1, 'O', 'O', 'O', 'O', 'O'));
ELSE -- Bloc 2
...
RETURN(F_MONTANT(A, B, C-1, 'O', 'O', 'O' 'O', 'O'));
END IF;
RETURN (MNT);
END F_MONTANT;
/ |
Merci d'avance pour vos conseils.