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 :

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;
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
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%';
La vue ne se base que sur une seule table mais la fonction sur plusieurs ...

Merci à ceux ou celles qui ont lu jusqu'ici ... et encore plus à ceux qui me répondraient !!!