Bonjour,

Il semble que la fonction INSTR bugge lorsque NLS_SORT est à FRENCH_AI et NLS_COMP est à LINGUISTIC.

J'ai une chaîne de caractères, dans laquelle se trouve une seule fois #136#. Je recherche la seconde occurence : la fonction INSTR ne devrait donc pas la trouver et renvoyer 0. Avec NLS_COMP à BINARY par exemple, elle renvoie bel et bien 0, mais en modifiant NLS_SORT et NLS_COMP comme indiqué ci-dessus, la fonction la trouve!!! En fait, elle ne trouve pas #136# mais 1#36 ce qui n'est pas la même chose! De plus, elle indique une position approximative...

Alors, que faire? Sachant que j'ai absolument besoin de NLS_SORT et NLS_COMP paramétrés ainsi dans mon application, car les utilisateurs font des recherches sur des noms par exemple, et souhaitent que "René" = "RENE", et j'utilise dans pas mal d'endroits des INSTR sur des chaînes comportant des nombres séparés par des # ....

Voici ci-dessous les instructions pour reproduire le bug.

Merci pour vos réponses.

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
SELECT INSTR
         ('#136#137#138#139#604#151#152#155#291#154#153#148#294#296#300#3318#295#297#301#2170#3319#3631#3621#3617#3615#'
        , '#136#', 1, 2)
  FROM DUAL;
 
-- renvoie 0
 
alter session set NLS_SORT = FRENCH_AI;
 
alter session set NLS_COMP = LINGUISTIC;
 
SELECT INSTR
         ('#136#137#138#139#604#151#152#155#291#154#153#148#294#296#300#3318#295#297#301#2170#3319#3631#3621#3617#3615#'
        , '#136#', 1, 2)
  FROM DUAL; 
 
-- renvoie 96