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 :

Fonction SUBSTR en oracle 10g


Sujet :

SQL Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Fonction SUBSTR en oracle 10g
    Bonjour,

    L'utilisation de la fonction SUBSTR me pose un problème lors du passage de ma base de donnée de oracle8i à oracle10g.

    En effet j'ai un script qui me permet de récupérer les 200 premiers caractères d'une colonne contenant des VARCHAR2(2000)
    Exemple : (le champ desciption est un varchar2(2000))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select substr(description,1,200) as "description",
             name as "name"         
    from matable
    where .... ;
    Lorsque j'utilise ce scipt avec ma base en oracle 8i, celui-ci me retourne bien les 200 premiers caractères de ma chaine suivi du champ "name".

    En lançant ce script sur une base 10g, le champ "description" va bien être tronqué à 200 caractères, cependant le select va compléter cette valeur retournée par 1800 caractère nuls (la valeur retournée par le substring aura alors une longueur de 2000 caractères qui correspond à la longueur du champ "description" dans la base).

    Pourriez-vous m'éclairer sur ce problème?
    Est-il possible de conservez le même fonctionnement qu'avec Oracle 8i?

    J'espère m'être fait comprendre.

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    cela ne dépend pas de la version mais de la valeur ce CURSOR_SHARING. Avec EXACT, substr te retourne la taille désirée.

    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> alter session set cursor_sharing='SIMILAR';
     
    Session altered.
     
    SQL> select substr('HELLO',1,3) from dual;
     
    SUBSTR('HELLO',1,3)
    --------------------------------
    HEL
     
    SQL> alter session set cursor_sharing='EXACT';
     
    Session altered.
     
    SQL> select substr('HELLO',1,3) from dual;
     
    SUB
    ---
    HEL

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup, ça fonctionne!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2010, 00h52
  2. [Oracle 10g] Connaître la fonction appelante
    Par doukem dans le forum PL/SQL
    Réponses: 4
    Dernier message: 12/12/2008, 15h45
  3. Réponses: 2
    Dernier message: 29/04/2008, 08h24
  4. [Oracle 10G] Filtrer une requête en fonction d'une autre table
    Par shaun_the_sheep dans le forum Oracle
    Réponses: 4
    Dernier message: 27/04/2008, 04h49
  5. Réponses: 7
    Dernier message: 03/05/2006, 09h05

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