Bonjour à tous,
soit une table ENTREE au format imposé:
Soit un ensemble d'algorithmes F que je dois appliquer à chaque ligne de signature type:Code:ENTREE: CLE, VAL1,VAL2,...,VALn
Comme ces algorithmes sont nombreux et doivent itérer sur la liste des (VAL1,...,VALn) parfois de manièreCode:F(VAL1,VAL2,...,VALN) RETURNS VAL1res,VAL2res,...,VALnRes
compliquée je réalise ces algos en PL/SQL avec des fonctions type:
sinon le code serait difficilement maintenable.Code:F(VARRAY) RETURNS VARRAYres
Mon code ressemble donc à un truc du style:
où: nth_element(res,n) est une fonction PL renvoyant le Nème élément du VARRAY et to_varray(val1,val2,...,valn) est une fonction PL renvoyant le varray [val1,val2,...,valn].Code:
1
2
3
4
5
6
7
8 CREATE TABLE SORTIE AS SELECT cle, nth_element(res,1) as VAL1res, nth_element(res,2) as VAL2res, nth_element(res,n) as VALnRes FROM ( SELECT cle, F(to_varray(val1,val2,...,valn) ) as res FROM ENTREE)temp );
Ce qui m'ennuie le plus c'est la requête englobante - avec les nth_element(res,1) - car elle force Oracle à re-parcourir le jeu de résultats de la sous-requête temp. La table entrée peut être volumineuse (1 500 000 lignes).
Peut-on éviter cela ? Ou quelqu'un a t'il une meilleure idée ? (j aimerai éviter les curseurs) .
Merci d'avance pour votre aide,