Bonjour,
J'ai d'une part une fonction qui me permet de recéperer des valeurs pour une clé donnée, d'autre part une VUE qui utilise plusieur fois cette fonction ...
Le résultat est que les performances sont plutôt mauvaises ...
Je ne suis pas expert SQL donc si quelqu'un peut me donner un avis ou une piste à creuser.
Voici quelques infos :
Ma fonction :
Voici un resumé de ma vue :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE OR REPLACE FUNCTION XXXXX.GET_MULTIVALUED_FOLDER_VALUES(processId IN VARCHAR2, attrName IN VARCHAR2) RETURN VARCHAR2 IS attrValue VARCHAR2(4000); BEGIN attrValue := ''; FOR c IN (SELECT FV.CWFVALUE FROM CWFFOLDERELEMENT FE, CWFFOLDERVALUES FV WHERE FV.CWFFOLDERELEMENTID = FE.CWFFOLDERELEMENTID AND FE.CWFPROCESSINSTID = processID AND FE.CWFLABEL = attrName) LOOP attrValue := attrValue || ';' || c.CWFVALUE; END LOOP; RETURN SUBSTR(attrValue, 2); END;
La vue ne se base que sur une seule table mais la fonction sur plusieurs ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE OR REPLACE FORCE VIEW XXXXXX.V_PROCESS2SYNTHETISE (CWFPROCESSINSTID, CWFACCESSDATE, CWFCREATIONDATE, CWFDESCRIPTION, CWFENDDATE, CWFHOSTENGINE, CWFLONGNAME, CWFMODIFIEDDATE, CWFPARENTNODE, CWFPARENTPROCESS, CWFPROCESSBLOCKED, CWFPROCESSCDMAPPLICATION, CWFPROCESSINITIATOR, CWFPROCESSINSTNAME, CWFPROCESSLABEL, CWFPROCESSMODEL, CWFPROCESSSTATE, CWFPROCESSSUMUPFORM, CWFPROCESSTIMEOUT, CWFTIMEOUTREFERENCE, CWFSYNCPROCESS, CWFLINKALARM, CWFPROCESSINITFORM, CWFPROCESSSTATUS, POSSIBLEMODELS, REQUESTER_DN, ID_PROCESS, REQUESTER_NAME, DELAITIME, OBSERVER_NAMES, OBSERVER_DNS, APPLICATION_QUERIES, LIBRARY_NAME, RECIPIENT_NAMES, RECIPIENT_DNS) AS select CWFPROCESSINSTANCE.CWFPROCESSINSTID, CONCAT(GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipientNames'),GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipientsNames')) AS RECIPIENT_NAMES, CONCAT(GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipients'),GET_MULTIVALUED_FOLDER_VALUES(CWFPROCESSINSTID, 'recipientDns')) AS RECIPIENT_DNS from CWFPROCESSINSTANCE where CWFPROCESSINSTANCE.CWFPARENTPROCESS IS NULL AND CWFPROCESSINSTANCE.CWFPROCESSINSTID LIKE 'XXXXX%';
Merci à ceux ou celles qui ont lu jusqu'ici ... et encore plus à ceux qui me répondraient !!!
Partager