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 :

[OracleXE] Distinct et CLOB


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut [OracleXE] Distinct et CLOB
    Bonjour,
    alors voilà j'ai une requête qui contient une colonne de type CLOB en retour mais j'aimerais faire un distinct sur les lignes retournées. Or le distinct et les type lob ne s'aiment pas...
    Ma table
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    CREATE TABLE Personne(
      NumPersonne NUMBER(10) NOT NULL,
      Nom VARCHAR2(25),
      Prenom VARCHAR2(25),
      Observation CLOB,
      PRIMARY KEY (NumPersonne)
    );
    Ma requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT P.NumPersonne, P.Nom, P.Prenom, P.Observation
    FROM Personne P
    INNER JOIN Voyages V ON V.NumPersonne = P.NumPersonne
    WHERE V.DateDebut > '01/01/2009'
    Quelqu'un aurait une idée ?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 331
    Par défaut
    Si ta colonne "Observation" ne dépasse pas les 4000 caractères, tu peux réécrire ta requête comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT P.NumPersonne, P.Nom, P.Prenom, TO_CHAR(P.Observation) 
    FROM Personne P
    INNER JOIN Voyages V ON V.NumPersonne = P.NumPersonne
    WHERE V.DateDebut > '01/01/2009'
    Rachid

  3. #3
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Restrictions on DISTINCT and UNIQUE Queries
    When you specify DISTINCT or UNIQUE, the total number of bytes in all select list expressions is limited to the size of a data block minus some overhead. This size is specified by the initialization parameter DB_BLOCK_SIZE.
    You cannot specify DISTINCT if the select_list contains LOB columns.
    Mais, faire "Select distinct colonne" clé primaire est erroné, n'est pas vrai ?

  4. #4
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Mais, faire "Select distinct colonne" clé primaire est erroné, n'est pas vrai ?
    Etant donné que je fais une jointure, cela peut remonter plusieurs fois la même ligne.

    @mydb_server:
    Merci pour ta réponse, le problème c'est que derrière j'utilise des composants qui attendent une colonne de type Mémo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Personne: Type inadéquat pour le champ 'Observation', attendu : Memo actuel : String
    Bon j'ai supprimé les DISTINCT dans les requêtes sur les tables qui avaient une colonne de type BLOB et ça ne gène pas mon programme...Mais bon...

    Mon application étant multibase, elle fonctionnait trés bien sous SQL Server et MySQL. La norme est pourtant claire sur le distinct et les colonnes de type LOB. Cela voudrait dire que les autres SGBD ont optimisés leur parser SQL dans ce sens, permettant ce genre de requête....?!

    Merci, en tout cas, à tous les deux d'avoir bien voulu répondre à ma demande

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Votre syntaxe n'est pas adpatée à ce que vous voulez faire.
    En l'occurence, vous cherchez les personnes qui ont fait au moins un voyage depuis 2009.

    Celà s'écrit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT P.NumPersonne, P.Nom, P.Prenom, P.Observation
      FROM Personne P
     WHERE EXISTS (SELECT NULL 
                     FROM Voyages V
                    WHERE V.NumPersonne = P.NumPersonne
                      AND V.DateDebut > to_date('01/01/2009', 'dd/mm/yyyy'))
    Et là, plus de problème de distinct.

  6. #6
    Membre expérimenté
    Avatar de HumanTool
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2006
    Messages
    276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2006
    Messages : 276
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Votre syntaxe n'est pas adpatée à ce que vous voulez faire.
    En l'occurence, vous cherchez les personnes qui ont fait au moins un voyage depuis 2009.

    Celà s'écrit ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT P.NumPersonne, P.Nom, P.Prenom, P.Observation
      FROM Personne P
     WHERE EXISTS (SELECT NULL 
                     FROM Voyages V
                    WHERE V.NumPersonne = P.NumPersonne
                      AND V.DateDebut > to_date('01/01/2009', 'dd/mm/yyyy'))
    Et là, plus de problème de distinct.
    D'accord, mais du coup je me pose la question qu'en est il niveau performance ?

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

Discussions similaires

  1. XPath et DISTINCT
    Par netsliver dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 16/06/2004, 11h47
  2. equivalent SELECT DISTINCT pour MyBase?
    Par chrisou31 dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 19h33
  3. Lier 2 bases distinctes
    Par seb.49 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/02/2004, 10h19
  4. Réponses: 12
    Dernier message: 27/08/2003, 11h04
  5. tri obligatoire avec DISTINCT?
    Par Marseillais9 dans le forum Langage SQL
    Réponses: 10
    Dernier message: 31/07/2003, 17h50

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