comment convertir csv à table dans oracle
Comment puis-je faire un package qui renvoie les résultats sous forme de tableau lorsqu'il est passé en csv valeurs.
select * from table(schema.mypackage.myfunction('one, two, three'))
doit retourner
one
two
three
J'ai essayé quelque chose de demander à tom mais qui ne fonctionne qu'avec des types sql.
Je suis à l'aide de oracle 11g. Est-il quelque chose de construit?
OriginalL'auteur Mehur | 2010-06-29
Vous devez vous connecter pour publier un commentaire.
Les ouvrages suivants
invoquer celle-ci comme
select * from table(splitter('a,b,c,d))
OriginalL'auteur josephj1989
Hélas, dans 11g nous avons encore à handroll notre propre PL/SQL des générateurs de jetons, à l'aide de types SQL. Dans Oracle 11gR2 nous a donné une fonction d'agrégation pour concaténer les résultats dans un fichier CSV chaîne, donc peut-être dans 12i ils vont fournir à l'inverse de la capacité.
Si vous ne voulez pas créer un type SQL en particulier, vous pouvez utiliser le haut-SYS.DBMS_DEBUG_VC2COLL, comme ceci:
Ici, il est en action:
Remerciements: ce code est une variante de un peu de code que j'ai trouvé sur Tanel Poder blog.
OriginalL'auteur APC
Voici une autre solution à l'aide d'une expression régulière matcher entièrement en sql.
OriginalL'auteur Shailesh
Pour des performances optimales, il est préférable d'éviter d'utiliser hiérarchique (se CONNECTER) requêtes dans le diviseur de la fonction.
Suivantes splitter fonction effectue une bonne affaire mieux lorsqu'il est appliqué à de plus grands volumes de données
Cette différence de performances peuvent être observées en dessous (j'ai utilisé la fonction splitter a été donné plus tôt dans cette discussion).
OriginalL'auteur Bobby Kenny
Je n'ai pas 11g installé à jouer avec, mais il y a un PIVOT et UNPIVOT opération pour la conversion des colonnes à des rangées et des rangées de colonnes, qui peuvent être un bon point de départ.
http://www.oracle.com/technology/pub/articles/oracle-database-11g-top-features/11g-pivot.html
(Ayant effectivement fait un peu plus loin l'enquête, cela ne semble pas adapté pour ce cas, il fonctionne avec de véritables lignes /colonnes, mais pas les séries de données dans une colonne).
Il est également DBMS_UTILITY.comma_to_table et table_to_comma pour la conversion de CSV listes en pl/sql des tables. Il y a quelques limitations (manipulation des sauts de ligne, etc), mais il peut être un bon point de départ.
Mon inclination serait d'utiliser l'approche de TYPE, avec une fonction simple qui ne comma_to_table, puis PIPE LIGNE pour chaque entrée dans le résultat de comma_to_table (malheureusement, DBMS_UTILITY.comma_to_table est une procédure ne peut donc pas appeler à partir de SQL).
OriginalL'auteur JulesLt