Comment mieux split csv chaînes dans oracle 9i
Je veux être en mesure de séparer csv chaînes dans Oracle 9i
J'ai lu l'article suivant
http://www.oappssurd.com/2009/03/string-split-in-oracle.html
Mais je n'ai pas à comprendre comment faire ce travail.
Voici quelques unes de mes questions s'y rapportant
- Serait-ce de travailler dans Oracle 9i, si non, pourquoi pas?
- Est-il une meilleure façon d'aller sur le fractionnement du csv cordes puis la solution présentée ci-dessus?
- Dois-je créer un nouveau type? Si oui, ai-je besoin d'privilages pour qui?
- Puis-je déclarer le type w/dans la fonction?
OriginalL'auteur Joyce | 2009-07-06
Vous devez vous connecter pour publier un commentaire.
Voici une chaîne tokenizer pour Oracle qui est un peu plus simple que celui de la page, mais aucune idée si c'est aussi rapide:
Vous pouvez l'utiliser comme ceci:
OriginalL'auteur Michael Sofaer
Joyce,
Voici trois exemples:
1) à l'Aide de dbms_utility.comma_to_table. Ce n'est pas un objectif général de routine, parce que les éléments doivent être des identificateurs valides. Avec quelques trucs sales, nous pouvons le faire fonctionner plus universelle:
2) à l'Aide de SQL connect par niveau. Si vous êtes sur 10g ou plus, vous pouvez utiliser la connexion-par-niveau de l'approche en combinaison avec des expressions régulières, comme ceci:
3) de Nouveau à l'aide de SQL connect par niveau, mais maintenant, en combinaison avec la bonne vieille SUBSTR/INSTR dans le cas où vous êtes sur la version 9, comme vous êtes:
Vous pouvez voir une partie de plus en plus techniques comme celles-ci, dans ce billet de blog: http://rwijk.blogspot.com/2007/11/interval-based-row-generation.html
Espère que cette aide.
Ce qui concerne,
Rob.
À l'adresse de votre commentaire:
Un exemple de l'insertion de valeurs séparées dans une table normalisée.
D'abord créer les tables:
Parce que vous semblez intéressé par le dbms_utility.comma_to_table approche, je le mentionne ici. Cependant, je ne recommande pas cette variante, en raison de l'identificateur de bizarreries et en raison de la lenteur ligne par ligne de traitement.
Je ne recommande cet unique SQL variante:
Ce qui concerne,
Rob.
J'ai ajouté une section de la réponse à l'adresse de votre commentaire.
Salut Rob, la solution # 2 [à l'Aide de SQL connect par niveau] fonctionne très bien pour moi.Mais maintenant,j'ai une exigence de passer 2 CSV cordes[de longueur égale] comme entrée PL/SQL stockées proc.Et, j'ai besoin d'insérer des valeurs de ces deux CSV chaînes de caractères dans les deux colonnes de la table.Pourriez-vous s'il vous plaît laissez-moi savoir comment vous y prendre?
Le numéro 2 est excellent
OriginalL'auteur Rob van Wijk
Vous voudrez peut-être un peu plus clair sur ce que vous voulez faire, alors nous pouvons vous donner une réponse précise. Montrant une partie de votre code est toujours utile 🙂
Si vous utilisez des paramètres, de découper une chaîne de csv nombres (par exemple: 1,2,3,4) utilisez-la dans un
IN
instruction ont un look à la fonctionstr2tbl()
dans Question 670922. Avec quelques modifications, vous pouvez le changer pour unVARCHAR2
ou tout ce que vous avez besoin.Dans le suivant, vous pouvez définir
:sMyCatagories
égal à'1,2,3,4'
et de l'utiliser dans une instruction select....
C'est vraiment utile que si vous utilisez les paramètres. Si vous êtes munging ensemble SQL dans votre application, alors il suffit d'utiliser un normal DANS l'état.
OriginalL'auteur Mark Nold
J'ai utilisé ce en fin de compte
OriginalL'auteur Joyce
Il semble que vous ne voulez pas ajouter de schéma (types, fonction). SQL seul moyen pour analyser le texte délimité par est de "devenir fou" avec instr et substr appels.
Si vous cherchez à formaliser une structure et approprié d'ajouter le code de l'application (fonctions, vues, etc...) je voudrais prendre un coup d'oeil à Tom Kyte est l'écriture sur ce sujet.
Ce n'est pas la seule façon...
OriginalL'auteur Brian