Index et fonctions : ORA-01450
Bonjour,
J'essaie de créer un index sous Oracle 10g portant sur des fonctions de ce type :
Code:
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:
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.