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

Administration Oracle Discussion :

Nom de colonne avec caractères spéciaux inaccessible


Sujet :

Administration Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut Nom de colonne avec caractères spéciaux inaccessible
    Hello amis DBA,

    Pour mes tests j'ai créée une table avec un nom de colonne contenant des caractères spéciaux.
    Problème : impossible de référencer la colonne.
    Plus fort : les colonnes semblent être traitée différemment que les tables car une table avec le même nom peut être interrogée.

    La création de la colonne avec des guillemets est OK.
    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
    SQL> CREATE TABLE test02 ("a$^ù*$" VARCHAR2(10));
    Table created.
     
     
    SQL> desc  test02
    Name			Null?	Type
    ------------------------------------
    a$^??*$					VARCHAR2(10)
     
     
    SQL> SELECT * FROM test02;
    a$^??*$
    ----------
    TEST
     
     
    SQL> SELECT COLUMN_NAME from dba_tab_cols where TABLE_NAME = 'TEST02' and owner = 'HR'; 
    COLUMN_NAME
    ----------------------------------------------------------------------------------------------------
    a$^??*$

    Interrogation KO.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> select a$^??*$ from test02;
    select a$^??*$ from test02
             *
    ERROR at line 1:
    ORA-00923: FROM keyword not found where expected
     
     
    SQL> select "a$^??*$" from test02;
    select "a$^??*$" from test02
           *
    ERROR at line 1:
    ORA-00904: "a$^??*$": invalid identifier

    En PL/SQL c'est pas mieux...
    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
    SQL> DECLARE
    	v_col_name VARCHAR2(128);
    	v_select VARCHAR2(128);
    BEGIN
    	SELECT COLUMN_NAME into v_col_name from dba_tab_cols where TABLE_NAME = 'TEST02' and owner = 'HR';
    	v_select := 'SELECT "' || v_col_name || '" FROM test02';
    	dbms_output.put_line(v_select);
    	EXECUTE IMMEDIATE 'SELECT ' || v_col_name || ' FROM test02';
    END;
    /  
     
    SELECT "a$^??*$" FROM test02
    DECLARE
    *
    ERROR at line 1:
    ORA-00923: FROM keyword not found where expected
    ORA-06512: at line 8

    En revanche, pour une table de même nom, pas de problème pour utiliser les guillemets.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SQL> CREATE TABLE "a$^??*$" ( ID NUMBER);
    Table created.
     
     
    SQL> desc "a$^??*$"
    Name						       Null?	Type
    ----------------------------------------------------- -------- ------------------------------------
    ID								NUMBER
     
     
    SQL> select * from "a$^??*$";
    no rows selected

    Une aide serait bienvenue

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Euh, chez moi ça fonctionne.. mais tu changes de nom de colonne entre tes tests.. j'ai l'impression que tu as merdouillé dans tes tests
    CREATE TABLE test02 ("a$^ù*$" VARCHAR2(10));
    Table created.

    SQL> desc test02
    Name Null? Type
    ------------------------------------
    a$^??*$ VARCHAR2(10)

  3. #3
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Oh putaing... j'ai du faire un mauvais copier/coller...
    Toutes mes excuses

    Ah non, c'est le ù qui pose problème : il a été transformé en ??

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est marrant, moi j'ai pas eu ce problème ! Mais bon, j'ai pas testé avec sqlplus

  5. #5
    Membre Expert
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    2 005
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 2 005
    Par défaut
    Quelque chose me dit que je suis tombé sur le classique du classique : pb de character set entre le client et la base de données

    Finalement c'est OK si je saisi ù au lieu de ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SQL> select "a$^ù*$" from test02;
    a$^??*$
    ----------
    TEST
    Maintenant cela signifie que si je fais un SELECT dans DBA_TAB_COLS, le nom de colonne stocké est faux... houlalalalalala, ça va loin tout ça.

  6. #6
    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
    Par défaut
    Comme ça on en revient au bon vieux conseil depuis au moins 30 ans :
    n'utiliser que les lettres de A à Z, sans accent bien sûr, pour nommer les objets Oracle.

Discussions similaires

  1. Réponses: 1
    Dernier message: 24/06/2013, 22h27
  2. Nom de tables avec caractères spéciaux
    Par electropop2 dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/09/2009, 17h08
  3. Réponses: 3
    Dernier message: 11/10/2004, 17h26

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