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

SQL Oracle Discussion :

[XE] SELECT avec ORDER BY sur chaine > 1000


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 16
    Points : 16
    Points
    16
    Par défaut [XE] SELECT avec ORDER BY sur chaine > 1000
    Bonjour,

    Je m'interroge sur les limitations que la version 10.2 d'Oracle express possède.
    Par exemple, sur une chaîne de type VARCHAR2(2000), si ma chaîne possède plus de 1000 caractères et que je passe la requête suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ma_chaine FROM ma_table ORDER BY ma_chaine;
    J'ai le retour d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ERREUR à la ligne 1 :
    ORA-01401: valeur insérée trop grande pour colonne
    Par contre si je passe la même requête sur une base en Oracle 10.1 (pas express edition) ou en Oracle 11g, la même requête passe sans problème.

    Y a-t-il une limitation dans l'affichage d'une chaîne de plus de 1000 caractères avec Oracle Express Edition?
    Ou y a-t-il une option à modifier dans la configuration du serveur Oracle Express?

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Vous devez avoir un encodage multioctets par caractères.
    Il faut créer votre table en VARCHAR2(2000 CHAR).

  3. #3
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    Oracle XE utilise AL32UTF8 comme charset serveur....
    Le conseil de Waldar est donc le bon.
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    J'ai essayé directement un ALTER TABLE pour modifier ma colonne mais cela n'a pas marché.
    J'ai donc essayé de recréer ma table en spécifiant VARCHAR2(2000 CHAR), mais là aussi, après chargement de ma table le ORDER BY sur ma chaîne de 2000 caractères me renvoie le même message d'erreur

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    Vous pouvez donner les scripts de ce qui ne fonctionne pas, mais avec 10 / 20 caractères afin que ce soit lisible ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Je n'ai pas de script à proprement parlé.
    Pour les besoins d'un éditeur, je charge une table qui contient une chaîne de 2000 caractères à partir d'un fichier .txt et avec SQL Loader.

    Voilà à quoi ressemble mon fichier de contrôle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    LOAD DATA INFILE 'C:\Fichier.txt'
    TRUNCATE
    INTO TABLE CID_LPP_INDIC
    FIELDS TERMINATED BY "|"
    (LPPCOD,
    DEBDAT date "YYYYMMDD",
    FINDAT date "YYYYMMDD",
    LPPINDICTXT char(2000),
    LPPINDICTXTCOD "'DM'||DBMS_UTILITY.GET_HASH_VALUE(:LPPINDICTXT, 1, 12684354)")
    Ma chaîne est la suivante: LPPINDICTXT
    Le type de cette colonne est VARCHAR2(2000) créée en VARCHAR2(2000 CHAR).

    J'ai l'erreur en faisant un SELECT (sur n'importe quelle colonne) lorsque j'ordonne sur LPPINDICTXT (sachant que la donnée la plus longue fait 1999 caractères).

  7. #7
    Rédacteur
    Avatar de Vincent Rogier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 373
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 373
    Points : 5 307
    Points
    5 307
    Par défaut
    et si tu vides ta table et que tu réimportes via sql*loader mais cette fois en modifiant ton fichier de contrôle en spécifiant :

    ...
    LPPINDICTXT char(2000 CHAR)
    ...


    Ca donne quoi ?
    Vincent Rogier.

    Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

    Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

    OCILIB (C Driver for Oracle)

    Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 16
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    LPPINDICTXT char(2000 CHAR) n'est pas valide dans un fichier de contrôle.
    Mais je ne pense pas que le blocage vienne de l'import.
    Voilà comment est créé ma table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE CID_LPP_INDIC
    (LPPCOD VARCHAR2(7) NOT NULL,
    DEBDAT DATE NOT NULL,
    FINDAT DATE,
    LPPINDICTXT VARCHAR2(2000 CHAR) NOT NULL,
    LPPINDICTXTCOD VARCHAR2(10) NOT NULL
    );
    Si je fais un INSERT manuellement avec LPPINDICTXT contenant 1300 caractères:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO CID_LPP_INDIC (LPPCOD, DEBDAT, LPPINDICTXT, LPPINDICTXTCOD) values ('TEST01', to_date('20100921','yyyymmdd'), 'balbla x1300 caractères ...', 'TEST000001')
    En faisant un SELECT * avec ORDER BY LPPINDICTXT, j'ai toujours le même message d'erreur ORA-01401.

Discussions similaires

  1. Select avec 2 critères sur des tables reliées
    Par beyo dans le forum Requêtes
    Réponses: 4
    Dernier message: 07/12/2010, 16h03
  2. select avec group by sur la date la plus recente
    Par maysa dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/07/2010, 13h02
  3. Select avec "having max" sur chp date
    Par Adel_mana dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/08/2009, 13h01
  4. Réponses: 2
    Dernier message: 26/11/2008, 10h43
  5. Réponses: 3
    Dernier message: 02/08/2007, 17h07

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