Bonjour,
J'essaie de créer un index sous Oracle 10g portant sur des fonctions de ce type :
La seconde fonction utilisée dans mon index est très similaire.
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;
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 :
Quelqu'un aurait-il une idée? Quelque chose doit m'echapper...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 CREATE INDEX IDX_TEST ON TABLETEST (fonction1(champs1),fonction2(champs2));
Merci d'avance.
Partager