Bonjour,

J'essaie de créer un index sous Oracle 10g portant sur des fonctions de ce type :

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
 
CREATE OR REPLACE FUNCTION fonction1 (param VARCHAR2)
RETURN VARCHAR2
DETERMINISTIC
IS
	retour VARCHAR2(32);
BEGIN
 
	IF INSTR(param, '-') <> 0
		THEN retour := substr(param, 1,INSTR(param, '-')-1);
	ELSE
		retour := param;
	END IF;
 
	RETURN lower(retour);
END;
La seconde fonction utilisée dans mon index est très similaire.

J'ai une table TABLETEST ayant un champs1 et un champs2 de type VARCHAR2(32).

Si je crée un index avec une seule fonction, ça passe.

Lorsque j'essaie de créer un index sur cette table en utilisant deux fonctions, j'obtiens l'erreur suivante ORA-01450: longueur maximum de clé (6398) depassée.
De ce que j'ai compris et cherché sur le net, je suis en théorie très loin de cette longueur maximum.

J'ai essayé de remplacer le RETURN lower(retour) par RETURN SUBSTRB(lower(retour),1,32), ça ne change rien.

Voici le code utilisé pour la création de l'index :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
CREATE INDEX IDX_TEST 
ON TABLETEST
(fonction1(champs1),fonction2(champs2));
Quelqu'un aurait-il une idée? Quelque chose doit m'echapper...
Merci d'avance.