2015-11-06 1 views
1

Nous avons une collection de tables à partir de laquelle nous avons besoin d'une vue créée ... il y a 30 colonnes dans la vue. Une (la dernière) colonne utilise listagg pour agréger plusieurs valeurs d'une des tables ... une autre colonne est un BLOB d'une autre table.Oracle 12 - Blob dans les sauts de liste de groupes par colonnes listagg?

Tout allait bien comme j'ai créé la vue une colonne à la fois. ajouter le listagg - puis a commencé à ajouter toutes les colonnes group-by .. quand j'ai ajouté la colonne BLOB, erreur incohérente type de données renvoyé .. attend - obtenu BLOB. Donc, juste une question générale, ... est-ce que le fait d'avoir une colonne BLOB dans la liste des colonnes group by by pour une colonne listagg brise le tout? Existe-t-il un moyen de contourner le problème en utilisant uniquement SQL?

Toutes les idées et suggestions appréciées. Étant donné que plusieurs tables et plusieurs colonnes sont impliquées, j'espère avoir suffisamment expliqué la situation pour obtenir des suggestions sans essayer de créer la totalité du dossier pour révision.

+0

Pouvez-vous éditer votre question et montrer votre requête? Ou au moins une version simplifiée qui a la même erreur? –

Répondre

2

Vous ne pouvez pas regrouper par colonnes LOB. Si vous obtenez le listagg d'une table et que vous souhaitez ensuite sélectionner des informations dans une seconde table, pourquoi ne pas effectuer le regroupement avant d'effectuer la jointure?

Par exemple. Quelque chose comme:

select t1.col1, 
     t1.col2, 
     t1.grouped_col3, 
     t2.blob_col 
from (select col1, 
       col2, 
       listagg(col3, ',') within group (order by col4) grouped_col3 
     from  first_table 
     group by col1, col2) t1 
     inner join t2 on (t1.col1 = t2.col1 and t1.col2 = t2.col2); 
+0

Parfait !! Merci .. – user761758

+0

et, si la colonne blob est dans le tableau 1? rejoint à la même table deux fois permis ici>? – user761758

+0

pouvez-vous joindre la même table dans la requête interne? – user761758