IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

[Oracle] Enlever le case sensitive???


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 112
    Points : 52
    Points
    52
    Par défaut [Oracle] Enlever le case sensitive???
    Salut,
    j'aimerai enlever le case sensitive d'oracle, est ce possible?

    voici mon contexte:
    J'utilise une application (Metastorm E-work), celle-ci importe une liste de user depuis notre annuaire LDAP.
    Mon probleme est que les user sont écrit un peu n'importe comment:
    User / USER / user ...

    Du coup lorsque je vais communiquer les logins, certains seront en maj, d'otre en min d'autres avec la premiere en maj... bref, vous voyez le soucy.

    La solution est d'enlever le case sensitive d'oracle...
    Enfin si vs voyez d'autres solutions miracle, n'hésitez pas!

    MERCI D'AVANCE

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 64
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    Pour ma part j'aurais inséré tous ces users en majuscules ou en minuscules, comme ça c'est réglé et normé !

  3. #3
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 344
    Points
    344
    Par défaut
    Bien sûr, il est impossible d'annuler le case sensitive d'Oracle...

    Mais si je ne m'abuse, même plusieurs utilisateurs avec une casse différente (Test, tEst, TEST, test) auront TOUS le même schéma!

  4. #4
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Euh... Oracle est case INsensitive !

    que je fasse
    ou
    ou
    La connection se fait bien dans tous les cas...

  5. #5
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    même plusieurs utilisateurs avec une casse différente (Test, tEst, TEST, test) auront TOUS le même schéma!
    Attention, j'importe des user pour l'application e-work pas oracle!

    mon prb c'est que je n'ai pas la main pour faire mon import depuis LDAP. il créer automatiquement des enregistrements dans la base des users de l'appli...

    il est impossible d'annuler le case sensitive d'Oracle
    J'comprends... mais ca m'aurai bien aidé!

  6. #6
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 344
    Points
    344
    Par défaut
    Citation Envoyé par LeoAnderson
    Euh... Oracle est case INsensitive !

    que je fasse
    ou
    ou
    La connection se fait bien dans tous les cas...
    C'était ce que je voulais dire, mais je me suis mal exprimé...

  7. #7
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    merci pour votre aide, mais moi aussi j'me suis mal exprimé.

    J'import des enregistrements dans une table.
    Le résultat est le suivant:

    lorsque je fait: SELECT * FROM EUSER WHERE eusername='User';

    Ca n'est pas la meme chose que: SELECT * FROM EUSER WHERE eusername='USER';

    dsl pour mes prb de clareté :p

  8. #8
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 344
    Points
    344
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT upper(eusername), ...  FROM EUSER WHERE EUSERNAME=UPPER('user');
    [EDIT]
    Te prendra tous les utilisateurs (uSer, User, USER, etc, etc), car upper('uSer') donne USER, et where ... = upper('user') donne aussi USER...

    Upper met tous les caractères en majuscule...
    [/EDIT]

  9. #9
    Membre éprouvé Avatar de 13thFloor
    Homme Profil pro
    DBA Oracle freelance
    Inscrit en
    Janvier 2005
    Messages
    670
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations professionnelles :
    Activité : DBA Oracle freelance

    Informations forums :
    Inscription : Janvier 2005
    Messages : 670
    Points : 945
    Points
    945
    Par défaut
    Je pense qu'un trigger before_insert sur la table euser résoudra tes problèmes.
    Avant insertion de la colonne, tu la positionnes en upper ou en lower

  10. #10
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 080
    Points
    8 080
    Par défaut Re: [Oracle] Enlever le case sensitive???
    Citation Envoyé par osmoze
    j'aimerai enlever le case sensitive d'oracle, est ce possible?
    Je ne comprends pas clairement vos contraintes, mais pour répondre bêtement à la question, c'est tout à fait possible :

    ALTER SESSION SET NLS_COMP=ANSI;
    ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;

    Ainsi, User, uSer, USER, tout ça c'est du pareil au même.

  11. #11
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    MERCI a tous pour votre aide.
    Je vais essayer ttes ces idées tres interessantes.

    bonne continuation a tous...

  12. #12
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut Re: [Oracle] Enlever le case sensitive???
    Bonjour Pomalaix,


    Citation Envoyé par Pomalaix
    [Je ne comprends pas clairement vos contraintes, mais pour répondre bêtement à la question, c'est tout à fait possible :

    ALTER SESSION SET NLS_COMP=ANSI;
    ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;

    Ainsi, User, uSer, USER, tout ça c'est du pareil au même.
    Je ne connaissais pas ces options, j'ai tenté un petit test :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    SQL> ed
    Wrote file afiedt.buf
     
      1* create table TEST as select initCap(object_name) nom from all_objects
    SQL> /
     
    Table created.
     
    SQL> select * from TEST where rownum < 10;
     
    NOM
    ------------------------------
    Dual
    Dual
    System_Privilege_Map
    System_Privilege_Map
    Table_Privilege_Map
    Table_Privilege_Map
    Stmt_Audit_Option_Map
    Stmt_Audit_Option_Map
    Standard
     
    9 rows selected.
     
    SQL> select * from TEST where nom = 'dUaL';
     
    no rows selected
     
    SQL> ALTER SESSION SET NLS_COMP=ANSI; 
     
    Session altered.
     
    SQL> ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER; 
     
    Session altered.
     
    SQL> 
    SQL> select * from TEST where nom = 'dUaL';
     
    NOM
    ------------------------------
    Dual
    Dual
    System_Privilege_Map
    System_Privilege_Map
    Table_Privilege_Map
    Table_Privilege_Map
    Stmt_Audit_Option_Map
    Stmt_Audit_Option_Map
    Standard
    V$Dlm_Misc
    V$Dlm_Latch
    V$Dlm_Convert_Local
    ...
    Ca n'a pas l'air de fonctionner ?

    Laly.

  13. #13
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    D'après Metalink (Cf. Note:109118.1)

    GENERIC_BASELETTER LINGUISTIC DEFINITION ---------------------------------------- A new linguistic definition, also known as "sort", has been added to Oracle. The name of this definition is GENERIC_BASELETTER. 'Base Letters' are Latin characters with all accents stripped away. This definition was added to Oracle in version 8.1.6 but you can only use it to it's full extent since version 9.2.

    Ca ne fonctionne donc qu'à partir d'Oracle 9iR2, quelqu'un peut confirmer ?

    En tout cas je retiens le "truc".


    Merci,

    Laly.

  14. #14
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par lalystar
    Ca ne fonctionne donc qu'à partir d'Oracle 9iR2, quelqu'un peut confirmer ?
    Ca je l'ignore...

    Mais l'effet de la chose n'est pas d'influer sur le stockage (les majuscules ou minuscules sont respectées), ni sur l'affichage (là encore, si tu rentres "TotO", tu retrouves "TotO"), mais sur la sélectivité.

    Je m'explique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE TEST (a VARCHAR2(10));
    INSERT INTO TEST VALUES('toto');
    INSERT INTO TEST VALUES('TOTO');
    INSERT INTO TEST VALUES('TotO');
    -- en temps normal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM TEST WHERE a='TOTO';
     
    A
    ----------
    TOTO
    -- avec la fameuse manip
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ALTER SESSION SET NLS_COMP=ANSI;
    ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER; 
     
    SELECT * FROM TEST WHERE a='TOTO';
     
    A
    ----------
    toto
    TOTO
    TotO
    Tu vois le truc ?

  15. #15
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Je ne suis pas sûr d'avoir compris : dans mon exemple, je cherche les lignes qui sont similaires alors qu'aucune n'est exactement la même.
    Dans ton exemple, tu cherches les lignes similaires alors qu'il y en une qui est exactement la même.

    J'en déduis, que si la requête renvoie une ligne, elle renvoie aussi les formes "équivalentes" ?

    En tout cas, j'ai l'impression que ces commandes ont de dangereux effets secondaires :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
      1* select object_name from all_objects where rownum < 10
    SQL> /
     
    OBJECT_NAME
    ------------------------------
    DUAL
    DUAL
    SYSTEM_PRIVILEGE_MAP
    SYSTEM_PRIVILEGE_MAP
    TABLE_PRIVILEGE_MAP
    TABLE_PRIVILEGE_MAP
    STMT_AUDIT_OPTION_MAP
    STMT_AUDIT_OPTION_MAP
    STANDARD
     
    9 rows selected.
     
    SQL> ALTER SESSION SET NLS_COMP=ANSI; 
     
    Session altered.
     
    SQL> ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER; 
     
    Session altered.
     
    SQL> select object_name from all_objects where rownum < 10;
     
    no rows selected
    Ca me parait très mystérieux tout cas (je suis en 8.1.7.4)...


    Laly.

  16. #16
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par lalystar
    J'en déduis, que si la requête renvoie une ligne, elle renvoie aussi les formes "équivalentes" ?
    Ca n'a pas l'air d'être ca (Cf. http://download-west.oracle.com/docs...h4.htm#1010707).

    Performing a Generic Base Letter Search
    You can perform a search that ignores case and diacritics. Enter the following statements:

    ALTER SESSION SET NLS_COMP=ANSI;
    ALTER SESSION SET NLS_SORT=GENERIC_BASELETTER;


    Then enter a statement similar to the following:

    SELECT * FROM emp WHERE ename='miller';


    This statement can now return names that include the following:

    Miller
    MILLER
    Millér


    Note that this is not a linguistic search; that is, it is not based on a specific language. It uses the base letters only

    Je n'arrive décidémment pas à voir la nuance !


    Laly.

  17. #17
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Points : 8 080
    Points
    8 080
    Par défaut
    Citation Envoyé par lalystar
    Je n'arrive décidémment pas à voir la nuance !
    Ce qui se comprend, vu que ça déconne complètement chez toi !

    En 9iR2 il n'y a pas d'effets secondaires sur le ROWNUM.

    Sinon, pour le formuler autrement, avec ce paramétrage,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ... FROM table WHERE colonne=x
    est traité comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM table WHERE upper(colonne)=upper(x)
    (c'est même plus puissant que ça, puisque même les accents sont ignorés)

  18. #18
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    Citation Envoyé par Pomalaix
    Sinon, pour le formuler autrement, avec ce paramétrage,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT ... FROM table WHERE colonne=x
    est traité comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... FROM table WHERE upper(colonne)=upper(x)
    (c'est même plus puissant que ça, puisque même les accents sont ignorés)
    Si c'est le cas, c'est très utile.

    Je ferais le test chez moi (10g) pour vérifier. Je voulais savoir ce qu'il en était si on faisait la recherche sur une colonne indexée. Mais vu la seconde requête, aucun index ne pourra être utilisé.


    Merci,

    Laly.

  19. #19
    Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 112
    Points : 52
    Points
    52
    Par défaut
    pour ma part, j'vais travailler comme ca:
    SELECT ... FROM table WHERE upper(colonne)=upper(x)
    ca fonctionne et ca me convient (dsl pour la gene occasionnée)

  20. #20
    Membre averti Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Points : 344
    Points
    344
    Par défaut
    Citation Envoyé par osmoze
    dsl pour la gene occasionnée
    Je ne pense pas que tu as créer une gêne, mais plutôt un débat fort interressant et instructif

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 22
    Dernier message: 14/09/2010, 17h27
  2. Case sensitive oracle sur une table ou shema seulement
    Par bashou dans le forum Administration
    Réponses: 2
    Dernier message: 16/07/2010, 16h02
  3. base de registre et Case Sensitive
    Par freddyboy dans le forum Oracle
    Réponses: 5
    Dernier message: 06/02/2007, 11h45
  4. Désactiver la case sensitive
    Par soad dans le forum NetBeans
    Réponses: 4
    Dernier message: 30/08/2006, 20h59
  5. [Debat]case sensitive : pourquoi faire ?
    Par Rincevent76 dans le forum Langage
    Réponses: 53
    Dernier message: 24/04/2006, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo