Pourquoi le wm_concat pas de travail ici?
J'ai cette requête :
(SELECT OBJECT_ID from cr_object_group_entries_vw where object_group_id IN
(SELECT ITEM FROM TABLE(CR_FN_SPLIT_STRING('28,56',','))))
revient :
Mais quand je fais :
SELECT wm_concat(object_id) FROM
(SELECT OBJECT_ID from cr_object_group_entries_vw where object_group_id IN
(SELECT ITEM FROM TABLE(CR_FN_SPLIT_STRING('28,56',','))))
- Je obtenir un résultat vide... ce que je fais mal?
OriginalL'auteur sprocket12 | 2013-05-21
Vous devez vous connecter pour publier un commentaire.
Vous devez éviter
wm_concat
fonction parce qu'il est sans-papiers, et découvert, comme solution de contournement à Oracle 8i fois.Depuis l'époque de l'ancienne méthode avec personnalisé fonction d'agrégation comme l'a découvert par Tom Kyte ici il y a quelques nouvelles solutions de contournement, a montré dans les exemples ci-dessous.
Tous reproduits dans ce SQL Violon.
Solution de contournement 1 - LISTAGG fonction, travaille en 11g:
Solution 2 - SYS_CONNECT_BY_PATH, travaille depuis plus de 10g:
Solution 3 - XMLAGG, travaille depuis plus de 10g:
P. S. je ne sais pas exactement quels sont les versions d'Oracle
sys_connect_by_path
etxmlagg
a été introduit, mais les deux fonctionne bien sur 10.2.0.4.0wm_concat
n'est plus inclus avec `12c.OriginalL'auteur ThinkJet
Dans le cas où vous êtes sur 11g essayer
LISTAGG
au lieu dewm_concat
pour commencer.OriginalL'auteur be here now
Je viens de voir ce post concernant
wm_concat
et de la pensée de partager de l'information.Toute application qui a été en s'appuyant sur
wm_concat
fonction ne fonctionnera pas une fois mis à niveau vers12c
. Depuis, il a été supprimé à partir de la dernière version 12c. Voir Pourquoi ne pas utiliser WM_CONCAT fonction dans Oracle?Vous recevrez un “identifiant invalide” erreur:
Par conséquent, il est inutile de compter sur une fonctionnalité non documentée qui n'est plus disponible dans les versions les plus récentes.
Pour des solutions de rechange, veuillez consulter Oracle Chaîne D'Agrégation Des Techniques
OriginalL'auteur Lalit Kumar B
Vous ne semblent pas être à faire quelque chose de mal. Avec un mannequin de la table de fonction pour renvoyer les données que vous nous avez montré,
wm_concat
fonctionné pour moi:Vous ai tagué la question [11g]; @beherenow dit, si vous pouvez vous devez utiliser les prises en charge
lisgagg
sur la non prise en chargewm_concat
, mais il est uniquement disponible à partir de 11gR2 je pense:SQL Violon (pour
listagg
seulement, car il ne prend pas en chargewm_concat
- peut-être que votre exemple n'est pas non plus, mais il devrait erreur?)intéressant. Sonne comme quelque chose dans votre fonction de table est des choses confuses, ou plus probablement (peut-être) à votre avis, si je ne peux pas voir immédiatement comment. Pouvez-vous voir le même effet que si vous remplacez la vue (je suppose
cr_object_group_entries
est une vue du nom) avec les tables de base?J'ai essayé ce - SÉLECTIONNEZ wm_concat(item) from (SELECT * from TABLE (CR_FN_SPLIT_STRING('1,2,12,3,4,12,3',','))) qui éclate d'abord rejoint ensuite la même liste et sa fonctionne très bien, mais avec le point de vue il n'est pas, même si, quand j'exécute le point de vue sous-requête (capture d'écran ci-dessus) à son retour d'un résultat, on pourrait supposer pourrait plus tard être rejoint.
sans être en mesure de reproduire l'effet, il est difficile d'offrir tout plus de conseils. La seule chose qui vient à l'esprit pour essayer de faire est d'ajouter un `/*+ MATÉRIALISER */ astuce pour le sélectionner à partir de la vue, mais à saisir les pailles un peu. Cela ressemble à un bug pour moi, vous pourriez être mieux d'élever un SR avec Oracle?
OriginalL'auteur Alex Poole