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 :

[9.2] Vue avec fonction de Concaténation : Probléme


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Points : 87
    Points
    87
    Par défaut [9.2] Vue avec fonction de Concaténation : Probléme


    une requete qui me dépasse avec une fonction de concaténation à l'intérieur

    3 tables T1 T2 T3,t outes liées par le champ ID

    T1 et T3 les enregistrements de valeur ID sont uniques
    T2 les enregistrements de valeur ID peuvent être multiple

    une vue V_T1T2T3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select T1_3.ins,T1_T3.id,T3.idp,T1_3.zone
    from
    (select T1.id id,T1.ins inS,concatenate_list(CURSOR(SELECT LIBELLE FROM T2 WHERE T1.id = T2.id)) zone from T1) T1_3
    left join T3 on T1_3.id = T3.id
    une focntion concatenate_list :
    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
     (p_cursor IN  SYS_REFCURSOR)
      RETURN  VARCHAR2
    IS
      l_return  VARCHAR2(32767);
      l_temp    VARCHAR2(32767);
    BEGIN
      LOOP
        FETCH p_cursor
        INTO  l_temp;
        EXIT WHEN p_cursor%NOTFOUND;
        l_return := l_return || ', ' || l_temp;
      END LOOP;
      CLOSE p_cursor;
      RETURN LTRIM(l_return, ', ');
    END;
    qui fonctionne trés bien...

    si je passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from V_T1T2T3 where ins = '66';
    le résultat est nickel, le champ concaténé aussi... (j'attire votre attention sur le fait que ins dépend de l'identifiant T1_3 soit de T1 au final)

    si je passe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from V_T1T2T3 where idp = 'AB';
    (j'attire votre attention sur le fait que idp dépend de T3)

    C'est la catastrophe, ca ne tient pas compte du Where... et tout est renvoyé !

    sauf truc bizarre ds ce qui est renvyé seul les idp de la clause Wher sont renseignés !!

    les autres idp sont vides !!!

    Je suis paumé

    Merci d'avance si quelqu'un peut se pencher sur ce maquis

    PS : je peux pas utiliser GROUP BY pour la concaténation car j'ai un champ de type BLOB à remonter sur une requête de ce modèle....

    Lunab54

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    sur un exemple simple de quelques lignes qu'est ce que c'est sensé retourner ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Points : 87
    Points
    87
    Par défaut
    Merci Fred d'avoir déjà jeté un coup d'oeil

    voilà un exemple :

    T1

    ID INS
    1 66
    2 66
    3 66
    4 54


    T2

    ID ZONE
    1 AB
    1 AC
    1 AE
    2 AB
    2 AC
    3 AE
    4 AB
    4 AF

    T3

    ID IDPR
    1 AB
    2 AKJ
    3 AVF
    4 AGC

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT * from V_T1T2T3 where IDPR = 'AB'
     
    INS	ID	IDPR	ZONE
    66	1	AB	AB,AC,AE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * from V_T1T2T3 where IDPR IN('AB','AKJ')
     
    INS	ID	IDPR	ZONE
    66	1	AB	AB,AC,AE
    66	2	AKJ	AB,AC

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 198
    Points : 87
    Points
    87
    Par défaut Erreurs ds la structure
    c'est IDP et pas IDPR (excuses)
    T1

    ID INS
    1 66
    2 66
    3 66
    4 54


    T2

    ID ZONE
    1 AB
    1 AC
    1 AE
    2 AB
    2 AC
    3 AE
    4 AB
    4 AF

    T3

    ID IDP
    1 AB
    2 AKJ
    3 AVF
    4 AGC

    SELECT * from V_T1T2T3 where IDP = 'AB'

    INS ID IDP ZONE
    66 1 AB AB,AC,AE
    SELECT * from V_T1T2T3 where IDPR IN('AB','AKJ')

    INS ID IDP ZONE
    66 1 AB AB,AC,AE
    66 2 AKJ AB,AC

Discussions similaires

  1. [SQL SERVER 2K8] Droit lecture sur Vue avec Fonction
    Par 33Romain dans le forum Administration
    Réponses: 1
    Dernier message: 27/08/2009, 09h34
  2. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  3. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  4. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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